专题二:C++算法学习——滑动窗口_长度最小的子数组、

发布时间:2026/6/18 9:26:52

专题二:C++算法学习——滑动窗口_长度最小的子数组、 题目一滑动窗口_长度最小的子数组一、题目2.算法原理解法一暴力枚举所有子数组之和On的三次方在sum的基础上加O(n的二次方 )解法二利用单调性使用“同向双指针”来优化同向双指针(滑动窗口)怎么用更新结果不一样的题位置不一样让right先找到最佳位置大于t开始滑动正确性虽然没有全部枚举但利用单调性避免了很多没必要的美枚举行为left不变right不需要往后挪了没必要时间复杂度2n O(n)3.代码class Solution { public: int minSubArrayLen(int target, vectorint nums) { int n nums.size(), sum 0, minLen INT_MAX; for (int left 0, right 0; right n; right) { sum nums[right]; // 右窗口扩加入当前数字 while (sum target) // 窗口和满足条件尝试收缩左边界 { minLen min(minLen, right - left 1); // 更新最小长度 sum - nums[left]; // 左窗口缩移出数字 } } return ret };

相关新闻