力扣-最大连续1的个数III

思路分析

用「左右指针」维护一个滑动窗口,窗口内允许包含最多 k 个 0(翻转成 1 后就是全 1 子数组),通过调整窗口的左右边界,找到满足条件的最大窗口长度:

  • 右指针右移:遍历数组,逐个将元素纳入窗口,统计窗口内 0 的数量zeroCount;
  • 左指针右移:当zeroCount > k时,说明窗口内 0 的数量超过允许翻转的次数,需要右移左指针,直到zeroCount ≤ k;
    更新最大长度:每轮遍历都计算当前窗口长度(right - left + 1),并更新全局最大值。

代码实现

java 复制代码
public int longestOnes(int[] nums, int k) {
        // 定义左右指针
        int left = 0, right = 0;
        // 定义最大长度
        int maxLength = 0;
        // 定义0的数量
        int zeroNum = 0;
        while (right < nums.length){
            // 更新零的数量
            if (nums[right] == 0) {
                zeroNum++;
            }
            while (zeroNum > k){
                if (nums[left] == 0) {
                    zeroNum--;
                }
                left++;
            }

            maxLength = Math.max(maxLength, right - left + 1);
            ++right;
        }
        return maxLength;
    }

复杂度分析

  • 时间复杂度:O(n) → 每个元素最多被左、右指针各访问一次,总操作次数 2n;
  • 空间复杂度:O(1) → 仅使用常数个变量,无额外空间开销。

实例分析

示例 1:nums = 1,1,1,0,0,0,1,1,1,1,0,k = 2

遍历过程关键步骤:

right=0-2(元素 1,1,1):zeroCount=0 → 窗口长度 3,maxLen=3;

right=3(元素 0):zeroCount=1 ≤2 → 窗口长度 4,maxLen=4;

right=4(元素 0):zeroCount=2 ≤2 → 窗口长度 5,maxLen=5;

right=5(元素 0):zeroCount=3 >2 → 收缩左指针:

left=0(1)→ left++,zeroCount 仍 3;

left=1(1)→ left++,zeroCount 仍 3;

left=2(1)→ left++,zeroCount 仍 3;

left=3(0)→ left++,zeroCount=2;

此时窗口:left=4,right=5 → 长度 2;

right=6-9(元素 1,1,1,1):zeroCount=2 → 窗口长度 = 9-4+1=6,maxLen=6;

right=10(元素 0):zeroCount=3 >2 → 收缩左指针到 5,zeroCount=2 → 窗口长度 = 10-5+1=6;

相关推荐
C+-C资深大佬2 分钟前
C++ 中的 constexpr与 const区
java·开发语言·c++
8Qi83 分钟前
LeetCode 4:寻找两个正序数组的中位数 —— 二分查找法
java·算法·leetcode·职场和发展·二分查找
8Qi87 分钟前
LeetCode 32:最长有效括号 —— 栈 + 标记法 题解
java·数据结构·算法·leetcode·职场和发展··括号匹配
机器学习之心9 分钟前
198种组合算法+优化CNN-LSTM+SHAP分析+新数据预测+多输出!深度学习可解释分析,强烈安利,粉丝必备
深度学习·算法·cnn-lstm·shap分析·198种组合算法
Tairitsu_H9 分钟前
[LC优选算法#3] 滑动窗口 | 将x减到0的最⼩操作数 | ⽔果成篮 | 字⺟异位词
c++·算法·leetcode·滑动窗口
c++之路14 分钟前
CMake 系列教程(一):CMake 基础知识
c语言·开发语言·c++
bIo7lyA8v16 分钟前
算法复杂度与能耗关系的多变量分析研究的技术8
算法
Irissgwe18 分钟前
C++ STL bitset 和位图详解
开发语言·c++·stl·位图·bitset
洛水水1 小时前
【力扣100题】76.搜索插入位置
数据结构·算法·leetcode
Techblog of HaoWANG1 小时前
智巡守卫:多模态巡检智能体算法服务端设计与实现——基于Ollama+Qwen3.5的自动化巡检报告生成系统
运维·人工智能·算法·目标检测·自动化·边缘计算