参考: 分享滑动窗口模板,秒杀滑动窗口问题 - leetcode

滑动窗口模板:

  1. int longestOnes(vector<int>& nums) {
  2. int size = nums.size(); // 数组长度
  3. int maxSubLen = 0; // 满足条件的最大窗口长度
  4. int left = 0; // 滑动窗口左边界
  5. int right = 0; // 滑动窗口右边界
  6. int sum = 0; // 用于统计当前窗口是否有效,可能是求和 or 计数
  7. // 当右边界没有走到数组尾部
  8. while(right < size)
  9. {
  10. sum += nums[right]; // 根据右边界对 cnt 进行更新
  11. // 如果当前窗口不符合要求,则不断右移左边界,直到窗口符合要求
  12. while(当前窗口不符合要求)
  13. {
  14. sum -= nums[ledft]; // cnt 中需移除左边界
  15. ++left; // 左边界右移
  16. }
  17. // 更新满足条件的最大窗口长度
  18. maxSubLen = max(right - left + 1, maxSubLen);
  19. // 窗口右边界右移
  20. ++right;
  21. }
  22. return maxSubLen;

例 1:最大连续1的个数 III

[中等] 1004. 最大连续1的个数 III