• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
村雨sup
自己选的路,跪着也要走完 XD
博客园    首页    新随笔    联系   管理    订阅  订阅
Leetcode 1004. 最大连续1的个数 III

1004. 最大连续1的个数 III

 
我的提交返回竞赛
 
  • 用户通过次数97
  • 用户尝试次数143
  • 通过次数102
  • 提交次数299
  • 题目难度Medium

给定一个由若干 0 和 1 组成的数组 A,我们最多可以将 K 个值从 0 变成 1 。

返回仅包含 1 的最长(连续)子数组的长度。

 

示例 1:

输入:A = [1,1,1,0,0,0,1,1,1,1,0], K = 2
输出:6
解释: 
[1,1,1,0,0,1,1,1,1,1,1]
粗体数字从 0 翻转到 1,最长的子数组长度为 6。

示例 2:

输入:A = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], K = 3
输出:10
解释:
[0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1]
粗体数字从 0 翻转到 1,最长的子数组长度为 10。

 

提示:

  1. 1 <= A.length <= 20000
  2. 0 <= K <= A.length
  3. A[i] 为 0 或 1 
class Solution {
public:
    int longestOnes(vector<int>& A, int K) {
        queue<int> que;
        int left = 0;
        int res = 0;
        for(int right=0;right < A.size();right++){
            if(A[right] == 0){que.push(right);}
            if(que.size() > K) {//0的个数大于反转次数了
                left = que.front()+1;que.pop();
            }
            res = max(res,right-left+1);
        }
        return res;
    }
};

这种叫滑动窗口法,第一次见

posted on 2019-04-02 01:09  村雨sup  阅读(179)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3