classSolution { publicintminOperations(int[] nums, int x) { intn= nums.length, res = -1, l = 0, sum = 0; for (int a : nums) sum += a; inttarget= sum - x, cur = 0; if (target < 0) return -1; for (inti=0; i < n; ++i) { cur += nums[i]; while (cur > target) cur -= nums[l++]; if (cur == target) res = Math.max(res, i - l + 1); } return res < 0 ? -1 : n - res; } }
classSolution { publicintmaximizeWin(int[] pos, int k) { intn= pos.length, res = 0, l = 0; int[] pre = newint[n + 1]; for (inti=0; i < n; ++i) { while (pos[i] - pos[l] > k) ++l; res = Math.max(res, pre[l] + i - l + 1); pre[i + 1] = Math.max(pre[i], i - l + 1); } return res; } }
classSolution { publicintdivisorSubstrings(int num, int k) { Strings= num + ""; intn= s.length(), cnt = 0, x = 0, mod = (int) Math.pow(10, k - 1); for (inti=0; i < k; ++i) x = x * 10 + (s.charAt(i) - '0'); for (inti= k; i < n; ++i) { if (x != 0 && num % x == 0) ++cnt; x %= mod; x = x * 10 + (s.charAt(i) - '0'); } if (x != 0 && num % x == 0) ++cnt; return cnt; } }
方法二:子串处理
1 2 3 4 5 6 7 8 9 10 11 12
classSolution { publicintdivisorSubstrings(int num, int k) { Strings= String.valueOf(num); intn= s.length(), cnt = 0; for (inti=0; i + k <= n; ++i) { intx= Integer.parseInt(s.substring(i, i + k)); if (x != 0 && num % x == 0) ++cnt; } return cnt; } }
classSolution { publicintminimumDifference(int[] nums, int k) { if (nums.length == 1 || k == 1) return0; Arrays.sort(nums); intres=1000001, n = nums.length, l = 0; for (inti=0; i < n; ++i) { if (i - l + 1 == k) { res = Math.min(res, nums[i] - nums[l]); ++l; } } return res; } }
classSolution { publicdoublefindMaxAverage(int[] nums, int k) { intn= nums.length, l = 0; doubleres= Integer.MIN_VALUE, sum = 0; for (inti=0; i < n; ++i) { sum += nums[i]; if (i - l + 1 == k) { res = Math.max(res, sum / k); sum -= nums[l++]; } } return res; } }
classSolution { publicintnumOfSubarrays(int[] arr, int k, int threshold) { intl=0, cnt = 0, n = arr.length, sum = 0; for (inti=0; i < n; ++i) { sum += arr[i]; if (i - l + 1 == k) { if (sum / k >= threshold) ++cnt; sum -= arr[l++]; } } return cnt; } }
classSolution { publicintmaxSatisfied(int[] customers, int[] grumpy, int k) { intn= customers.length, l = 0, sum = 0, res = 0; for (inti=0; i < n; ++i) sum += grumpy[i] == 0 ? customers[i] : 0; for (inti=0; i < n; ++i) { sum += grumpy[i] == 1 ? customers[i] : 0; if (i - l + 1 == k) { res = Math.max(res, sum); if (grumpy[l] == 1) sum -= customers[l]; ++l; } } return res; } }
classSolution { publiclongmaxSum(List<Integer> nums, int m, int k) { intn= nums.size(), l = 0; longsum=0, res = 0; Map<Integer, Integer> map = newHashMap<>(); for (inti=0; i < n; ++i) { intx= nums.get(i); sum += x; map.put(x, map.getOrDefault(x, 0) + 1); if (i - l + 1 == k) { if (map.size() >= m) res = Math.max(res, sum); inty= nums.get(l++); sum -= y; map.put(y, map.get(y) - 1); if (map.get(y) == 0) map.remove(y); } } return res; } }
classSolution { publicintmaxScore(int[] nums, int k) { intsum=0, s = 0, l = 0, n = nums.length, res = Integer.MAX_VALUE; // n = 7 , k = 3 求长度位4的最小组数组 for (inti=0; i < n; ++i) { sum += nums[i]; s += nums[i]; if (i - l + 1 == n - k) { res = Math.min(res, s); s -= nums[l++]; } } return sum - (n - k == 0 ? 0 : res); } }