经典滑动窗口试题(一)

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

一、将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;
     }
};


目录
相关文章
|
7月前
|
算法
经典滑动窗口试题(二)
经典滑动窗口试题(二)
59 0
滑动窗口经典例题
滑动窗口经典例题
|
5月前
|
存储 算法
经典的滑动窗口的题目 力扣 2799. 统计完全子数组的数目(面试题)
经典的滑动窗口的题目 力扣 2799. 统计完全子数组的数目(面试题)
|
6月前
|
算法 搜索推荐 测试技术
力扣经典150题解析之二十九:三数之和
力扣经典150题解析之二十九:三数之和
48 0
|
6月前
|
C语言
|
7月前
|
算法 索引
【力扣经典面试题】55. 跳跃游戏
【力扣经典面试题】55. 跳跃游戏
|
7月前
|
算法 测试技术 索引
【力扣经典面试题】45. 跳跃游戏 II
【力扣经典面试题】45. 跳跃游戏 II
|
7月前
|
算法 容器
经典双指针算法试题(一)
经典双指针算法试题(一)
61 0
|
7月前
|
算法
经典双指针算法试题(二)
经典双指针算法试题(二)
62 0
|
计算机视觉
经典矩阵试题(一)
经典矩阵试题(一)
92 0