壹 ❀ 引

今天来做一道十分烦躁的题目,为什么烦躁,因为我字母写错了提交了三次错了三次!!!我的leetcode正确率大大下降!!那么这道题是leetcode的485. 最大连续1的个数,题目描述如下:

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

示例 1:

输入: [1,1,0,1,1,1]
输出: 3

解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3.

注意:

输入的数组只包含 0 和1

输入数组的长度是正整数,且不超过 10,000。

我们先简单分析题目,说说我的实现思路,最后再给出优质题解。

贰 ❀ 解题思路

首先很重要的一点,数组只包含数字0或1,而且数组的长度是正整数,也就是大于0的整数,所以数组至少有一位,那么我们就得考虑只有0像[0],或者[0,0,0,0,0,0,0]以及只有1的情况[1,1,1,1,1,1]

我首先想到的就是用正则,我们先将数组转成字符串,然后用正则/1+/g来匹配,+表示至少出现一次,比如:

'111011'.match(/1+/g);// ["111", "11"]

那我们只需要将匹配的结果按长度排个序,取最后一位就好了:

["111", "11"].sort((a,b) => {
return a.length - b.length;
});

那我们就直接贴代码:

/**
* @param {number[]} nums
* @return {number}
*/
var findMaxConsecutiveOnes = function (nums) {
// 假设数组全部是1,那么直接返回数组length即可
if (nums.indexOf(0) < 0) {
return nums.length;
};
// 如果数组全部是0,那就直接返回0
if (nums.indexOf(1) < 0) {
return 0;
};
var nums_ = nums.join("").match(/1+/g).sort(function (a, b) {
return a.length - b.length;
});
return nums_[nums_.length - 1].length;
};

我的提交错误一次就是没考虑[0]的情况,由于match匹配失败返回null,null.sort直接报错了...阿西吧。

那么第二种做法其实与正则类似,还是将数组转成字符串,然后按0进行切割,同样排序后取最后一位,这里就直接上代码,思路与上方相同:

/**
* @param {number[]} nums
* @return {number}
*/
var findMaxConsecutiveOnes = function (nums) {
if (nums.indexOf(0) < 0) {
return nums.length;
};
if (nums.indexOf(1) < 0) {
return 0;
};
var nums_ = nums.join("").split(0).sort(function (a, b) {
return a.length - b.length;
});
return nums_[nums_.length - 1].length;
};

虽然达到了效果,很遗憾这两种实现的实现都较慢,像这样:

由于这道题属于双指针分类,我想着怎么用双指针来解决这个问题,苦思冥想确实没想到好的办法,然后在看了优质解答后,顿时发现与双指针完全没啥关系....思想受限。

叁 ❀ 更优做法

直接贴代码:

/**
* @param {number[]} nums
* @return {number}
*/
var findMaxConsecutiveOnes = function (nums) {
// 计数器,每次遇到1让其自增
let count = 0;
// 当遇到0,就比较count与maxCount,将较大的值赋予maxCount
let maxCount = 0;
for (let i = 0; i < nums.length; i++) {
if (nums[i] === 1) {
count += 1;
} else if (nums[i] == 0) {
maxCount = Math.max(count, maxCount);
count = 0;
};
};
maxCount = Math.max(count, maxCount);
return maxCount;
};

我想大家看了代码思路就很清晰了,以[1,1,1,0,1]为例:

一开始count为0,遇到第一个1,自增count变成1,又连续遇到2个1,此时count变成了3。

接下来遇到了0,所以我们得重置count,重置前将count与maxCount较大的数赋予maxCount,所以此时maxCount为3。

接着遍历,又遇到1,count变成1。由于遍历完成,再次比较count与maxCount,1与3之间3更大,所以最终返回了3。

思路很简单,但是我确实没想上去,那么关于此题分析就到这里了。

JS leetcode 最大连续1的个数 题解分析的更多相关文章

  1. [LeetCode]最大连续1的个数

    题目 代码 class Solution { public: int findMaxConsecutiveOnes(vector<int>& nums) { int length= ...

  2. 领扣(LeetCode)最大连续1的个数 个人题解

    给定一个二进制数组, 计算其中最大连续1的个数. 示例 1: 输入: [1,1,0,1,1,1] 输出: 3 解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3. 注意: 输入的数组 ...

  3. [LeetCode] Max Consecutive Ones II 最大连续1的个数之二

    Given a binary array, find the maximum number of consecutive 1s in this array if you can flip at mos ...

  4. [LeetCode] Max Consecutive Ones 最大连续1的个数

    Given a binary array, find the maximum number of consecutive 1s in this array. Example 1: Input: [1, ...

  5. Leetcode 485. 最大连续1的个数

    1.题目描述(简单题) 给定一个二进制数组, 计算其中最大连续1的个数. 示例 1: 输入: [1,1,0,1,1,1] 输出: 3 解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 ...

  6. LeetCode(485. 最大连续1的个数)

    问题描述 给定一个二进制数组, 计算其中最大连续1的个数. 示例 1: 输入: [1,1,0,1,1,1] 输出: 3 解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3. 注意: ...

  7. Leetcode 1004. 最大连续1的个数 III

    1004. 最大连续1的个数 III  显示英文描述 我的提交返回竞赛   用户通过次数97 用户尝试次数143 通过次数102 提交次数299 题目难度Medium 给定一个由若干 0 和 1 组成 ...

  8. Java实现 LeetCode 485 最大连续1的个数

    485. 最大连续1的个数 给定一个二进制数组, 计算其中最大连续1的个数. 示例 1: 输入: [1,1,0,1,1,1] 输出: 3 解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数 ...

  9. 【leetCode】485. 最大连续1的个数

    给定一个二进制数组, 计算其中最大连续1的个数. 示例 1: 输入: [1,1,0,1,1,1]输出: 3解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3.注意: 输入的数组只包含 ...

  10. C#LeetCode刷题之#485-最大连续1的个数(Max Consecutive Ones)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3714 访问. 给定一个二进制数组, 计算其中最大连续1的个数. ...

随机推荐

  1. 【FreeRTOS】任务调度

    启动调度器接口,主要是创建空闲任务和定时器任务以及执行特定架构的启动调度器接口 // FreeRTOS\Source\tasks.c void vTaskStartScheduler( void ) ...

  2. Go-包-package-modules-import

  3. 使用阿里canal实现mysql与Elasticsearch增量同步

    一.背景介绍 最近在做一个地理信息相关的项目,需要维护大量的地址描述数据,同时需要提供对数据检索的功能,准备采用Elasticsearch(6.7)实现.那么问题就来了,地址数据需要同时在MySQL和 ...

  4. [转帖]六千字带你了解 Oracle 统计信息和执行计划

    https://cloud.tencent.com/developer/article/1616706 大家好,我是 JiekuXu,很高兴又和大家见面了,今天分享下 Oracle 统计信息和执行计划 ...

  5. [转帖]TiFlash DeltaTree 存储引擎设计及实现分析 - Part 1

    https://tidb.net/book/book-rush/features/tiflash-code/tiflash-deltatree TiFlash 是 TiDB 的分析引擎,是 TiDB ...

  6. [转帖]SQL标准

    SQL 的标准 1986 年 10 月,美国国家标准协会 ANSI 采用 SQL 作为关系数据库管理系统的标准语言,并命名为 ANSI X3. 135-1986,后来国际标准化组织(ISO)也采纳 S ...

  7. [转帖]Linux中split大文件分割和cat合并文件详解

    https://www.yingsoo.com/news/servers/70195.html 当需要将较大的数据上传到服务器,或从服务器下载较大的日志文件时,往往会因为网络或其它原因而导致传输中断而 ...

  8. [转帖]nmon使用及监控数据分析

    [使用] [监控数据分析] 参考链接:nmon监控数据分析 性能测试中,各个服务器资源占用统计分析是一个很重要的组成部分,通常我们使用nmon这个工具来进行监控以及监控结果输出. 一.在监控阶段使用类 ...

  9. [转帖]用实力诠释细节!“Java性能调优六大工具”之JDK命令行工具

    https://www.zhihu.com/people/javajia-gou-ji-zhu-44/posts   JDK命令行工具 在JDK的开发包中,除了大家熟知的java.exe和javac. ...

  10. Linux上面Shell简单进行数值计算的办法

    1. 自己简单写了一个脚本 来计算 一个服务进程启动的耗时, 精度要求不高 10秒上下就可以. 在程序执行之前和之后的处理 在最前面设置一句time1=`date +%s`在末尾一句设置time2=` ...