LeetCode1004.最大连续1的个数

题目链接:1004. 最大连续1的个数 III - 力扣(LeetCode)

1.常规解法(会超时)

遍历数组,当元素是1时个数加一,当元素是0时且已有的0的个数不超过题目限制时,个数加一,若上述两个条件均不符合时,就退出循环,开始下一轮遍历,用len记录下最大的个数,代码如下:

java 复制代码
    public int longestOnes(int[] nums, int k) {
        int len = 0;
        int n = nums.length;
        for (int i = 0; i < n; i++) {
            int count = 0;
            int j = i;
            int distance = 0;
            for (; j < n; j++) {
                if (nums[j] == 1) {
                    distance++;
                } else if (nums[j] == 0 && count < k) {
                    distance++;
                    count++;
                } else {
                    break;
                }
            }
            len = Math.max(len, distance);
        }
        return len;
    }

2.滑动窗口

由常规解法可知,在第一轮遍历的时候,结果为"1 1 1 0 0",在下一轮遍历时,从第二个1开始,但由于"1 1 0 0"在第一轮遍历时已经判断为符合条件的数据,就会发生重复判断,因此,可以使用滑动窗口解决问题

先定义两个指针left和right,均指向第一个元素,再定义一个变量count记录子串中0的个数;

让right开始向后移动,当right指向的元素为1时,继续向后移动,当right指向的元素为0时,将count加一;

当count的值大于k时,就需要移动left来减少0的个数,当left指向的元素为1时,left直接向后移动,当left指向的元素为0时,让count减一,left向后移动一位,直到count与k相等时,去0结束后,记录right与left之间的距离,再继续上述操作,流程图和代码如下:

java 复制代码
    public int longestOnes(int[] nums, int k) {
        int n = nums.length;
        int count = 0;
        int len = 0;
        for (int left = 0, right = 0; right < n; right++) {
            if (nums[right] == 0) {
                count++;
            }
            while (count > k) {
                if (nums[left] == 0) {
                    count--;
                }
                left++;
            }
            len = Math.max(len, right - left + 1);
        }
        return len;
    }

希望读者给出建议!

相关推荐
小侯不躺平.18 小时前
C++ Boost库【6】时间戳整体综合
开发语言·c++·算法
likerhood18 小时前
Java ArrayList 详解:从动态数组到扩容机制与常见陷阱
java·开发语言·windows
Chloeis Syntax18 小时前
JavaEE初阶学习日记(3)---网络初认识
java·网络·笔记·学习
AI人工智能+电脑小能手18 小时前
【大白话说Java面试题 第80题】【Mysql篇】第10题:MySQL 在什么条件下索引失效?
java·开发语言·mysql·adb·面试
还在忙碌的吴小二18 小时前
Spring Boot Examples 学习示例集新手入门指南
java·spring boot·后端·学习·spring
wuweijianlove18 小时前
算法稳定性分析中的输入扰动响应模型的技术6
算法
霸道流氓气质18 小时前
Spring AI 工作流引擎扩展 Human-in-the-Loop 人工审批功能完整实战
java·人工智能·spring
视觉算法小姥18 小时前
yolov11-obb在rk芯片部署的onnx模型输出的剪枝处理
算法·yolo·剪枝
KaMeidebaby18 小时前
卡梅德生物技术快报|糖蛋白纯化 Sevage 法工艺优化:正交与响应面法对比实操分析
人工智能·其他·算法·百度·新浪微博
前网易架构师-高司机18 小时前
ROS2 Jazzy+Gazebo Harmonic 环境下,用 URDF 搭建机器人,配置物理属性、插件与桥接,修复车轮和激光雷达故障 (手把手保姆级教程)
开发语言·算法·golang·机器人·ros