壹 ❀ 引

今天来做一道十分烦躁的题目,为什么烦躁,因为我字母写错了提交了三次错了三次!!!我的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. Linux: CPU C-states

    0. Overview There are various power modes of the CPU which are determined based on their current usa ...

  2. Vue之使用elementUI的upload上传组件导入csv文件

    最近干活的时候有个需求,需要将csv文件导入到mysql数据库中,前后端框架用的springboot+Vue,组件用的elementUI,下面将分步骤记录实现过程. 1.导入按钮部分: <el- ...

  3. 【rt-thread】移植touchgfx时出现如下错误和现象

    [问题描述] 基于cubemx生成的touchgfx工程,移植入rt-threadkeil编译报重复定义 加载到文件组中的文件奇妙的出现了 Src_ .Device_.i2c_.Keil_  前缀,这 ...

  4. SpringMVC06——数据绑定——2021-05-09

    数据绑定介绍 在执行程序时,SpringMVC会根据客户端请求参数的不同, 将请求信息中的信息以一定的方式转换并绑定到控制器类的方法参数中. 在数据绑定过程中,SpringMVC框架会通过数据绑定组件 ...

  5. Advanced .Net Debugging 1:你必须知道的调试工具

    一.简介    我曾看到过许多开发人员使用错误的工具来分析问题,更有甚者,有些人连任何工具都没有使用.他们采取的分析方法通常包括:输出更多的调试信息,或者做一些临时性的代码审查.这里的临时性是指,通过 ...

  6. [转帖]linux系统下grub.cfg详解和实例操作

    linux系统下grub.cfg详解和实例操作 简介 grub是引导操作系统的程序,它会根据自己的配置文件,去引导内核,当内核被加载到内存以后,内核会根据grub配置文件中的配置,找到根分区所使用的文 ...

  7. stress-NG 磁盘测试结果-全国产信创部分验证

    stress-NG 磁盘测试结果 摘要 前几天分别还是用了redis-benchmark还有specjvm2008进行了多种系统的压测 得出了信创CPU的一些简单结论 但是一直还没有压测磁盘, 今天想 ...

  8. [转帖]VMWare ESXi中,不同的虚拟网卡性能竟然能相差三倍!

    https://zhuanlan.zhihu.com/p/525656364 正文共:1024 字 11 图,预估阅读时间:1 分钟 在上个实验中(VPP使用DPDK纳管主机网卡),我们已经初步实现了 ...

  9. [转帖]性能分析之TCP全连接队列占满问题分析及优化过程(转载)

    https://www.cnblogs.com/wx170119/p/12068005.html 前言 在对一个挡板系统进行测试时,遇到一个由于TCP全连接队列被占满而影响系统性能的问题,这里记录下如 ...

  10. Nginx的再学习

    第一部分 Nginx的版本 Nginx官网提供了三个类型的版本 Mainline version:Mainline 是 Nginx 目前主力在做的版本,可以说是开发版 Stable version:最 ...