2026/5/21 15:19:04
网站建设
项目流程
医院网站建设 不足,wordpress分享有礼,合肥企业网站制作,开公司做网站滑动窗口算法简介滑动窗口是一种用于处理数组或字符串子区间问题的高效算法。通过维护一个动态窗口#xff08;通常由左右指针定义#xff09;#xff0c;在遍历过程中调整窗口大小或位置#xff0c;避免重复计算#xff0c;将时间复杂度从O(n)优化至O(n)。适用于连续子数…滑动窗口算法简介滑动窗口是一种用于处理数组或字符串子区间问题的高效算法。通过维护一个动态窗口通常由左右指针定义在遍历过程中调整窗口大小或位置避免重复计算将时间复杂度从O(n²)优化至O(n)。适用于连续子数组、子串等问题。滑动窗口的典型应用场景寻找满足条件的最小/最大子数组长度如和≥target的最短子数组。统计满足特定条件的子串或子数组数量如包含所有字符的最短覆盖子串。处理固定长度窗口的问题如计算大小为k的子数组平均值。Python实现模板可变窗口大小通用模板def sliding_window(s, target): left 0 result 0 # 或其他初始值如float(inf) current_value 0 # 当前窗口的统计值如和、字符频率等 for right in range(len(s)): current_value s[right] # 更新右指针带来的影响 while 窗口满足条件如current_value target: result min(result, right - left 1) # 更新结果根据问题调整 current_value - s[left] # 移除左指针的影响 left 1 # 收缩窗口 return result固定窗口大小示例大小为k的子数组平均值def fixed_window(nums, k): window_sum sum(nums[:k]) result [window_sum / k] for i in range(k, len(nums)): window_sum nums[i] - nums[i - k] # 滑动窗口移除左端加入右端 result.append(window_sum / k) return resulthttps://www.zhihu.com/zvideo/1992086275700854850/https://www.zhihu.com/zvideo/1992086274874578007/https://www.zhihu.com/zvideo/1992086273930835733/https://www.zhihu.com/zvideo/1992086272345411781/https://www.zhihu.com/zvideo/1992086268776039137/https://www.zhihu.com/zvideo/1992086268062999793/https://www.zhihu.com/zvideo/1992086267031212429/https://www.zhihu.com/zvideo/1992086266234282270/https://www.zhihu.com/zvideo/1992086264002933279/https://www.zhihu.com/zvideo/1992086262732051397/https://www.zhihu.com/zvideo/1992086262019023358/https://www.zhihu.com/zvideo/1992086260995610002/https://www.zhihu.com/zvideo/1992086260819452112/https://www.zhihu.com/zvideo/1992086260005757376/https://www.zhihu.com/zvideo/1992086259796047132/https://www.zhihu.com/zvideo/1992086258877494228/https://www.zhihu.com/zvideo/1992086257447236496/https://www.zhihu.com/zvideo/1992086256990057914/https://www.zhihu.com/zvideo/1992086255610126469/https://www.zhihu.com/zvideo/1992086254024673022/https://www.zhihu.com/zvideo/1992086251709415629/https://www.zhihu.com/zvideo/1992086251445170546/https://www.zhihu.com/zvideo/1992086249360597354/https://www.zhihu.com/zvideo/1992086249796813324/https://www.zhihu.com/zvideo/1992086247460603291/https://www.zhihu.com/zvideo/1992086247896786890/https://www.zhihu.com/zvideo/1992086245468303713/https://www.zhihu.com/zvideo/1992086244939826725/https://www.zhihu.com/zvideo/1992086241408223124/https://www.zhihu.com/zvideo/1992086242108658791/https://www.zhihu.com/zvideo/1992086239504007889/https://www.zhihu.com/zvideo/1992086238363145467/https://www.zhihu.com/zvideo/1992086238778369509/https://www.zhihu.com/zvideo/1992086235288717115/https://www.zhihu.com/zvideo/1992086236370858977/https://www.zhihu.com/zvideo/1992086235800434298/https://www.zhihu.com/zvideo/1992086233799759300/https://www.zhihu.com/zvideo/1992086233120265991/https://www.zhihu.com/zvideo/1992086232621131270/https://www.zhihu.com/zvideo/1992086231664841273/https://www.zhihu.com/zvideo/1992086231597741830/https://www.zhihu.com/zvideo/1992086229181818148/https://www.zhihu.com/zvideo/1992086229106325237/https://www.zhihu.com/zvideo/1992086227973845402/https://www.zhihu.com/zvideo/1992086227508298907/https://www.zhihu.com/zvideo/1992086223934742995/https://www.zhihu.com/zvideo/1992086222378639453/https://www.zhihu.com/zvideo/1992086222340891585/https://www.zhihu.com/zvideo/1992086220050802315/https://www.zhihu.com/zvideo/1992086218834461645/https://www.zhihu.com/zvideo/1992086216741515924/https://www.zhihu.com/zvideo/1992086214795368066/https://www.zhihu.com/zvideo/1992086211058234131/https://www.zhihu.com/zvideo/1992086208965264892/https://www.zhihu.com/zvideo/1992086209279852609/https://www.zhihu.com/zvideo/1992086209292412677/https://www.zhihu.com/zvideo/1992086207132345927/https://www.zhihu.com/zvideo/1992086207816033726/https://www.zhihu.com/zvideo/1992086206742295474/https://www.zhihu.com/zvideo/1992086206352205819/https://www.zhihu.com/zvideo/1992086206402561315/https://www.zhihu.com/zvideo/1992086203516884357/https://www.zhihu.com/zvideo/1992086202308894883/https://www.zhihu.com/zvideo/1992086201180657319/https://www.zhihu.com/zvideo/1992086200459227255/https://www.zhihu.com/zvideo/1992086199846846688/https://www.zhihu.com/zvideo/1992086198773118078/https://www.zhihu.com/zvideo/1992086198664045259/https://www.zhihu.com/zvideo/1992086197598697102/https://www.zhihu.com/zvideo/1992086196722110763/https://www.zhihu.com/zvideo/1992086197166694427/实战案例案例1和≥target的最短子数组LeetCode 209def minSubArrayLen(target, nums): left 0 min_len float(inf) current_sum 0 for right in range(len(nums)): current_sum nums[right] while current_sum target: min_len min(min_len, right - left 1) current_sum - nums[left] left 1 return min_len if min_len ! float(inf) else 0案例2无重复字符的最长子串LeetCode 3def lengthOfLongestSubstring(s): left 0 max_len 0 char_index {} # 记录字符最后出现的位置 for right in range(len(s)): if s[right] in char_index and char_index[s[right]] left: left char_index[s[right]] 1 # 移动左指针到重复字符的下一位 char_index[s[right]] right max_len max(max_len, right - left 1) return max_len关键注意事项窗口条件明确收缩窗口的条件如和超过阈值、出现重复字符。边界处理检查输入为空或无法满足条件的情况如返回0或特定值。数据结构根据问题选择哈希表统计频率或变量记录和、计数等。通过调整模板中的窗口条件和更新逻辑可解决大多数滑动窗口问题。