007. 数组中和为 0 的三个数
class Solution {
public List> threeSum(int[] nums) {
List> ans =new ArrayList();
Arrays.sort(nums);
int n=nums.length;
for(int i=0;i0&&nums[i]==nums[i-1])continue;//因为排好序 以相同的数为起点 得到的三元组必定重复
for(int j=i+1,k=n-1;ji+1&&nums[j]==nums[j-1])continue;
while(nums[i]+nums[j]+nums[k]>0&&k>=j+2)k--;
if(nums[i]+nums[j]+nums[k]==0)ans.add(Arrays.asList(nums[i],nums[j],nums[k]));
}
}
return ans;
}
}
008. 和大于等于 target 的最短子数组
class Solution {
public int minSubArrayLen(int target, int[] nums) {
int ans=0x3f3f3f3f;//滑动窗口
Queue queue=new LinkedList();
int sum=0;
for(int i=0;i0&&sum-queue.peek()>=target)
{
sum-=queue.peek();
queue.poll();
}
ans=Math.min(ans,queue.size());
}
return ans==0x3f3f3f3f?0:ans;
}
}
009. 乘积小于 K 的子数组
class Solution {
public int numSubarrayProductLessThanK(int[] nums, int k) {
//固定i找最左边的j使得j乘到i=k)p/=nums[j++];//如果一个数比target大 所以要小于等于
ans+=i-j+1;
}
return ans;
}
}