已解决
同向双指针 滑动窗口【基础算法精讲 03】
来自网友在路上 155855提问 提问时间:2023-10-02 03:38:03阅读次数: 55
最佳答案 问答题库558位专家为你答疑解惑
长度最小的子数组 :
链接 :
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
思路 :
滑动窗口的思想,取i=j=0,向后遍历j,记录前缀和[l,r]为s,如果s>=target,那么左端点向右移动,直到s<target,维护一个[l,r]的滑动窗口,如此循环;
代码 :
Python :
class Solution:def minSubArrayLen(self, target: int, nums: List[int]) -> int:n = len(nums)ans = n+1l=0s=0for r,x in enumerate(nums):s+=xwhile s>=target:ans = min(ans,r-l+1)s-=nums[l]l+=1return ans if ans <= n else 0
C++
class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int n = nums.size();int i=0,j=0;long long sum = 0;int ans = INT_MAX;while(j<n){sum += nums[j];while(sum >= target){ans = min(ans,j-i+1);sum -= nums[i++];}j++;}return ans == INT_MAX ? 0 : ans;}
};
乘积小于K的子数组
链接 :
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
思想 :
滑动窗口,和上一题的思想一模一样;
对于一个区间[l,r],r固定,如果[l,r]的乘积小于k,那么对于整个区域满足乘积小于k的数量就是r-l+1个;
代码 :
class Solution:def numSubarrayProductLessThanK(self, nums: List[int], k: int) -> int:if k<=1:return 0n = len(nums)ans = 0l = 0pf = 1for r,x in enumerate(nums):pf *= xwhile pf >= k:pf /= nums[l]l += 1ans += r - l + 1return ans
无重复元素的子串
链接 :
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
思路 :
双指针,哈希表
思路和前两题类似;
假设在一个无重复元素的字符串后面加上一个字符,如果出现重复元素,那么一定重复的是新加上的那个字符,那么设置一个hash表来统计次数,然后反复将窗口最前面的元素移出窗口,直到将前面与新加元素相同的元素移出时停止;然后循环更新答案即可;
代码 :
Python
class Solution:def lengthOfLongestSubstring(self, s: str) -> int:l = 0cnt = Counter()ans = 0for r , c in enumerate(s):cnt[c]+=1while cnt[c]>=2:cnt[s[l]]-=1l+=1ans = max(ans,r-l+1)return ans
C++
class Solution {
public:int lengthOfLongestSubstring(string s) {unordered_map<char,int> hash;int ans=0;int n = s.size();int l=0;for(int r=0;r<n;r++){hash[s[r]]++;while(hash[s[r]] > 1) --hash[s[l++]];ans = max(ans,r-l+1);}return ans;}
};
查看全文
99%的人还看了
相似问题
- 〖大前端 - 基础入门三大核心之JS篇㊲〗- DOM改变元素节点的css样式、HTML属性
- CSS中常用的伪元素选择器
- XmlElement注解在Java的数组属性上,以产生多个相同的XML元素
- Web 自动化神器 TestCafe(二)—元素定位篇
- 代码随想录算法训练营第一天|数组理论基础,704. 二分查找,27. 移除元素
- 代码随想录算法训练营第五十九天 | LeetCode 739. 每日温度、496. 下一个更大元素 I
- JAXB:用XmlElement注解复杂类型的Java属性,来产生多层嵌套的xml元素
- Arcgis js Api日常天坑问题3——加载geojson图层,元素无属性
- 〖大前端 - 基础入门三大核心之JS篇㊳〗- DOM访问元素节点
- 力扣.82删除链表中的重复元素(java语言实现)
猜你感兴趣
版权申明
本文"同向双指针 滑动窗口【基础算法精讲 03】":http://eshow365.cn/6-15672-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: 如何利用niceGUI构建一个流式单轮对话界面
- 下一篇: 密码技术 (5) - 数字签名