经典滑动窗口试题(一)

简介: 经典滑动窗口试题(一)

一、将x减到0的最小操作数


1、题目讲解

9d9307d4e98a4ba0a708eb970ffeea26.png

2、讲解算法原理

ca851670b0db440196129c475abee329.png

3、代码实现

class Solution {
public:
    int minOperations(vector<int>& nums, int x) {
        int n=nums.size(),ret=0,sum=0,target,len=-1;
        for(int i=0;i<n;i++)
            ret+=nums[i];
        target=ret-x;
        if(target<0)  return -1;
        for(int left=0,right=0;right<n;right++)
        {
            sum+=nums[right];
            while(sum>target)
                sum-=nums[left++];
            if(sum==target)
                len=max(len,right-left+1);
        }
       if(len==-1) return len;
       else return n-len;
    }
};



二、无重复的最长子串


1、题目讲解

7447d9186f0b4181926c76641699fee4.png

2、讲解算法原理

2e9f662425bb4d77a379de92f4ba069c.png

3、代码实现

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int n=s.size();
        int count[128]={0},len=0;
        for(int left=0,right=0;right<n;right++)
        {
            count[s[right]]++;
            while(count[s[right]]==2)
                count[s[left++]]--;
            len=max(len,right-left+1);
        }
        return len;
    }
};



三、最大连续为1的个数


1、题目讲解

c315c79c9b2d451391fea9edfc2f5c9e.png

2、讲解算法原理

be187626e3044a8296e9008dc71e863a.png

3、代码实现

class Solution {
public:
    int longestOnes(vector<int>& nums, int k) {
        int n=nums.size(),zero=0,len=0;
        for(int left=0,right=0;right<n;right++)
        {
            if(nums[right]==0) zero++;
            while(zero>k)
                if(nums[left++]==0) zero--;
        }
        return len;
    }
};



四、长度最小的子数组


1、题目讲解

86755934ffdc41d19f7c0c1e5fccbc59.png

2、讲解算法原理

65c4afacbbe64d3e9fc147a0ef201aee.png

3、代码实现

class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums)
     {
         int n=nums.size(),len=INT_MAX;
         int sum=0;
         for(int left=0,right=0;right<n;right++)
         {
             sum+=nums[right];
             while(sum>=target)
             {
                 len=min(len,right-left+1);
                 sum-=nums[left];
                 left++;
             }
         }
         return len==INT_MAX?0:len;
     }
};


目录
相关文章
|
6月前
|
算法
经典滑动窗口试题(二)
经典滑动窗口试题(二)
54 0
滑动窗口经典例题
滑动窗口经典例题
|
存储 算法 JavaScript
带你读《图解算法小抄》二十、滑动窗口(3)
带你读《图解算法小抄》二十、滑动窗口(3)
|
6月前
|
算法
【刷题】滑动窗口入门
滑动窗口问题可以说是一种特殊的双指针问题
31 0
【刷题】滑动窗口入门
|
算法
带你读《图解算法小抄》二十、滑动窗口(1)
带你读《图解算法小抄》二十、滑动窗口(1)
|
算法
第 6 天_滑动窗口【算法入门】
第 6 天_滑动窗口【算法入门】
74 0
|
6月前
|
算法
经典双指针算法试题(二)
经典双指针算法试题(二)
56 0
|
6月前
|
算法 容器
经典双指针算法试题(一)
经典双指针算法试题(一)
57 0
|
算法
代码随想录算法训练营第十二天 | LeetCode 239. 滑动窗口最大值、LeetCode 347. 前 K 个高频元素
代码随想录算法训练营第十二天 | LeetCode 239. 滑动窗口最大值、LeetCode 347. 前 K 个高频元素
34 0
|
存储 算法 JavaScript
带你读《图解算法小抄》二十、滑动窗口(2)
带你读《图解算法小抄》二十、滑动窗口(2)