publicstaticintsearchInsert(int[] nums, int target){ int left = 0; int right = nums.length - 1; int mid = 0; int res = nums.length; while (left <= right) { mid = (left + right) / 2; if (nums[mid] < target) { left = mid + 1; } else { // 记录最后一次查找的位置 right = mid - 1; res = mid; } } return res; } }
publicintminSubArrayLen(int target, int[] nums){ int left = 0; int res = Integer.MAX_VALUE; int sum = 0; for (int right = 0; right < nums.length; right++) { sum += nums[right]; while (sum >= target) { res = Math.min(res, right - left + 1); sum -= nums[left++]; } } return res == Integer.MAX_VALUE ? 0 : res; } }
publicstatic String minWindow(String s, String t){ int len = Integer.MAX_VALUE; Map<Character, Integer> map = new HashMap<>(); Map<Character, Integer> window = new HashMap<>(); int start = 0; int left = 0; int valid = 0;
for (int i = 0; i < t.length(); i++) { map.merge(t.charAt(i), 1, Integer::sum); } for (int right = 0; right < s.length(); right++) { char key = s.charAt(right); if (map.containsKey(key)) { window.merge(key, 1, Integer::sum); if (window.get(key).equals(map.get(key))) { valid += 1; } } while (valid == map.size()) { if (right - left + 1 < len) { len = right - left + 1; start = left; } char out = s.charAt(left); left++; if (window.containsKey(out)) { // 这里不能写== 因为Integer是对象的比较,而不是值的比较 // if (window.get(out) == map.get(out)) { if (window.get(out).equals(map.get(out))) { valid--; } window.put(out, window.get(out) - 1); } } } return len == Integer.MAX_VALUE || start + len > s.length() ? "" : s.substring(start, start + len); } }