每日一练:LeeCode-485. 最大连续 1 的个数【双指针+贪心算法】

给定一个二进制数组 nums , 计算其中最大连续 1 的个数。

示例 1:

输入:nums = [1,1,0,1,1,1]
输出:3
解释:开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3.

示例 2:

输入:nums = [1,0,1,1,0,1]
输出:2

提示:

  • 1 <= nums.length <= 10^5
  • nums[i] 不是 0 就是 1.

思路

双指针

  • 首先初始化最长连续1的个数 res 为0。
  • 然后通过一个 for 循环遍历数组中的每一个元素,以每一个元素作为起始点进行检查。
  • 在循环中,首先将右指针 right 初始化为左指针 left 的位置。
  • 然后进入一个内部的 while 循环,该循环用于将右指针 right 向右移动,直到遇到0或到达数组末尾为止。
  • while 循环中,检查右指针所指向的元素是否为1,如果是1,则右指针向右移动,直到遇到0或到达数组末尾。
  • 当遇到0或到达数组末尾时,计算当前连续1的个数,并更新最长连续1的个数 res
  • 最后将左指针 left 更新为右指针 right 的位置,即下一个连续1的起始位置。
  • 循环继续,直到遍历完整个数组。
  • 最后返回最长连续1的个数 res
class Solution {
    public int findMaxConsecutiveOnes(int[] nums) {
        int res = 0; // 初始化最长连续1的个数为0
        for (int left = 0; left < nums.length; left++) { // 遍历数组中的每一个元素
            int right = left; // 将右指针初始化为左指针的位置
            while (right < nums.length && nums[right] == 1) right++; // 右指针向右移动直到遇到0或到达数组末尾
            res = Math.max(res, right - left); // 更新最长连续1的个数
            left = right; // 将左指针更新为右指针的位置,即下一个连续1的起始位置
        }
        return res; // 返回最长连续1的个数
    }
}

贪心算法

  • 首先初始化最长连续1的个数 max 和临时计数器 temp 都为0。
  • 通过一个 for 循环遍历数组中的每一个元素。
  • 在循环中,首先检查当前元素是否为1,如果是1,则临时计数器 temp 加1,表示遇到了连续的1。
  • 如果当前元素为0,则表示连续的1被断开,将临时计数器 temp 重置为0,重新开始计数连续的1。
  • 每次更新临时计数器 temp 的值后,使用 Math.max() 方法将 max 更新为当前最大值,即连续1的最大长度。
  • 循环结束后,返回最长连续1的个数 max
class Solution {
    public int findMaxConsecutiveOnes(int[] nums) {
        int max = 0; // 初始化最长连续1的个数为0
        int temp = 0; // 初始化临时计数器为0
        for (int i = 0; i < nums.length; i++) { // 遍历数组中的每一个元素
            if (nums[i] == 1) { // 如果当前元素为1
                temp++; // 临时计数器加1
            } else { // 如果当前元素为0
                temp = 0; // 重置临时计数器为0,表示当前断开了连续的1
            }
            max = Math.max(max, temp); // 更新最长连续1的个数
        }
        return max; // 返回最长连续1的个数
    }
}

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-21 01:54:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-21 01:54:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-21 01:54:01       82 阅读
  4. Python语言-面向对象

    2024-03-21 01:54:01       91 阅读

热门阅读

  1. python 常用装饰器

    2024-03-21 01:54:01       40 阅读
  2. C语言程序设计-谭浩强

    2024-03-21 01:54:01       39 阅读
  3. 【算法】归并排序模板

    2024-03-21 01:54:01       38 阅读
  4. 京东jd按关键字搜索商品 API

    2024-03-21 01:54:01       38 阅读
  5. 【mysql】MyISAM与InnoDB区别

    2024-03-21 01:54:01       37 阅读
  6. C++基本认识

    2024-03-21 01:54:01       42 阅读
  7. 数学建模论文格式

    2024-03-21 01:54:01       40 阅读
  8. 代码随想录day01

    2024-03-21 01:54:01       35 阅读
  9. 查看显卡型号linux

    2024-03-21 01:54:01       43 阅读
  10. Github 2024-03-19 Python开源项目日报 Top10

    2024-03-21 01:54:01       46 阅读