209. 长度最小的子数组
点击查看代码
class Solution {
public int minSubArrayLen(int target, int[] nums) {
int n = nums.length;
int res = Integer.MAX_VALUE;
int sum = 0;
int l = 0;
for(int i = 0; i < n ; i++){
//1缩小窗口
//1.1右端往右走
sum += nums[i];
while(sum >= target){//满足要求 到 不满足要求
//满足要求求一下res
res = Math.min(res, i - l + 1);
//1.2左端往右走
sum -= nums[l];
l++;
}
}
return res == Integer.MAX_VALUE ? 0 : res ;
}
}
713. 乘积小于 K 的子数组
点击查看代码
class Solution {
public int numSubarrayProductLessThanK(int[] nums, int k) {
if (k <= 1) return 0;
int n = nums.length;
int res = 0;
int sum = 1;
int l = 0;
for(int i = 0; i < n ; i++){
sum *= nums[i];//右端往右走
while(sum >= k){//不满足要求 到 满足要求
sum /= nums[l];
l++;
}
//满足要求了求一下res
res += i - l + 1;
}
return res;
}
}
3. 无重复字符的最长子串
点击查看代码
class Solution {
public int lengthOfLongestSubstring(String s) {
char[] a = s.toCharArray();
int n = a.length;
int res = 0;
int l = 0;
Map<Character, Integer> map = new HashMap<>();
for(int r = 0; r < n; r++){
map.put(a[r],map.getOrDefault(a[r],0) + 1);
while(map.get(a[r]) > 1){//不满足条件
map.put(a[l], map.get(a[l]) - 1);
l++;
}
//满足条件
res = Math.max(res, r - l + 1);
}
return res;
}
}