leetcode209. 长度最小的子数组
class Solution { public: int minSubArrayLen(int target, vector<int>& nums) { int sum=0; int sz=nums.size(); int left=0; int ans=sz+1; for(int i=0;i<sz;i++){//右端点 sum+=nums[i]; while(sum>=target){ ans=min(ans,i-left+1); sum-=nums[left]; left++; } } return ans == sz + 1 ? 0 : ans; } };Leetcode713. 乘积小于 K 的子数组
class Solution { public: int numSubarrayProductLessThanK(vector<int>& nums, int k) { //左端点l,右端点r。 //如果[l,r]这个区间满足要求,那么[l+1,r]...[r,r]都满足要求,共L-r+1个 if(k<=1) return 0; int ans=0; int prod=1; int left=0; for(int i=0;i<nums.size();i++){//遍历右端点 prod*=nums[i]; while(prod>=k){ prod/=nums[left]; left++; } ans+=(i-left+1); } return ans; } };Leetcode3. 无重复字符的最长子串
class Solution { public: int lengthOfLongestSubstring(string s) { int ans=0; unordered_map<char,int> mp; int left=0; for(int i=0;i<s.size();i++){ mp[s[i]]++; while (mp[s[i]]>1){ mp[s[left]]--;//此时右端点的字符和前面的有重复,从左端点一直往出删,直到无重复 left++; } ans=max(ans,i-left+1); } return ans; } };