目录
209. 长度最小的子数组
解析
题解
3. 无重复字符的最长子串
解析
题解
1004. 最大连续1的个数 III
解析
题解
209. 长度最小的子数组
209. 长度最小的子数组 - 力扣(LeetCode)
解析
题解
class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {// 009_专题二_滑动窗口_长度最小的子数组_C++int left = 0, right = 0, n = nums.size(), sum = 0, len = INT_MAX;while (right < n) {sum += nums[right]; // 进窗口while (sum >= target) // 判断{len = min(len, right - left + 1); // 更新结果sum -= nums[left];left++; // 出窗口}right++;}return len == INT_MAX ? 0 : len;}
};
3. 无重复字符的最长子串
3. 无重复字符的最长子串 - 力扣(LeetCode)
解析
题解
class Solution {
public:int lengthOfLongestSubstring(string s) {// 010_专题二_滑动窗口_无重复字符的最长子串_C++int hash[128] = {0};int n = s.size(), len = 0;for (int left = 0, right = 0; right < n; ++right) {hash[s[right]]++; // 进窗口while (hash[s[right]] == 2) // 判断{hash[s[left]]--; // 出窗口left++;}len = max(len, right - left + 1); // 出窗口之后再更新结果}return len;}
};
1004. 最大连续1的个数 III
1004. 最大连续1的个数 III - 力扣(LeetCode)
解析
题解
class Solution {
public:int longestOnes(vector<int>& nums, int k) {// 011_专题二_滑动窗口_最大连续 1 的个数III_C++// 转化为:找出最长的子数组,0的个数不少于kint n = nums.size(), len = INT_MIN;for (int left = 0, right = 0, zero = 0; right < n; ++right) {if (nums[right] == 0)zero++; // 进窗口while (zero > k) // 判断{if (nums[left] == 0)zero--;left++; // 向后移动}len = max(len, right - left + 1); // 更新结果}return len;}
};