JS leetcode 最大连续1的个数 题解分析
壹 ❀ 引
今天来做一道十分烦躁的题目,为什么烦躁,因为我字母写错了提交了三次错了三次!!!我的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的个数 题解分析的更多相关文章
- [LeetCode]最大连续1的个数
题目 代码 class Solution { public: int findMaxConsecutiveOnes(vector<int>& nums) { int length= ...
- 领扣(LeetCode)最大连续1的个数 个人题解
给定一个二进制数组, 计算其中最大连续1的个数. 示例 1: 输入: [1,1,0,1,1,1] 输出: 3 解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 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 ...
- [LeetCode] Max Consecutive Ones 最大连续1的个数
Given a binary array, find the maximum number of consecutive 1s in this array. Example 1: Input: [1, ...
- Leetcode 485. 最大连续1的个数
1.题目描述(简单题) 给定一个二进制数组, 计算其中最大连续1的个数. 示例 1: 输入: [1,1,0,1,1,1] 输出: 3 解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 ...
- LeetCode(485. 最大连续1的个数)
问题描述 给定一个二进制数组, 计算其中最大连续1的个数. 示例 1: 输入: [1,1,0,1,1,1] 输出: 3 解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3. 注意: ...
- Leetcode 1004. 最大连续1的个数 III
1004. 最大连续1的个数 III 显示英文描述 我的提交返回竞赛 用户通过次数97 用户尝试次数143 通过次数102 提交次数299 题目难度Medium 给定一个由若干 0 和 1 组成 ...
- Java实现 LeetCode 485 最大连续1的个数
485. 最大连续1的个数 给定一个二进制数组, 计算其中最大连续1的个数. 示例 1: 输入: [1,1,0,1,1,1] 输出: 3 解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数 ...
- 【leetCode】485. 最大连续1的个数
给定一个二进制数组, 计算其中最大连续1的个数. 示例 1: 输入: [1,1,0,1,1,1]输出: 3解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3.注意: 输入的数组只包含 ...
- C#LeetCode刷题之#485-最大连续1的个数(Max Consecutive Ones)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3714 访问. 给定一个二进制数组, 计算其中最大连续1的个数. ...
随机推荐
- java占位符%d,%s等的使用
(转载自:http://www.cnblogs.com/happyday56/p/3996498.html) String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语 ...
- Vue事件方法中this.属性名
vue事件方法中访问data对象中的成员 : this.属性名 注意: 如果事件处理代码没有写到methods中,而是写在行内则不需要this.
- 2021-10-13Docker
一.简介 1.技术前提 了解linux 修改虚拟机ip为静态: vim /etc/sysconfig/network-scripts/ifcfg-ens33 BOOTPROTO="stati ...
- Linux-文件用户及组管理-chown-chgrp
- ingress nginx 支持的K8S版本以及nginx版本信息
- [转帖]可直接拿来用的kafka+prometheus+grafana监控告警配置
kafka配置jmx_exporter 点击:https://github.com/prometheus/jmx_exporter,选择下面的jar包下载: 将下载好的这个agent jar包上传到k ...
- [转帖]如何用python连接Linux服务器
1.安装paramiko库 pip install paramiko 2.使用paramiko库连接linux #导入库 import paramiko 创建一个sshclient对象 ssh = p ...
- F5内核参数的简要学习
前言 最近学习了很长时间的Linux内核参数 但是大部分是纸上谈兵. 也没有一个好的系统用于学习和参照 晚上搜索F5资料时发现F5有一些iso和ova文件 就想着下载学习一下. 看看F5系统默认的参数 ...
- sed 删除部分行以及删除包含某些行的命令
sed的简单学习 前言: 最近进行mysql数据库的备份恢复操作,发现source 命令执行时数据库表的速度非常缓慢, 本来想通过这种方式处理一下,能够减少数据备份的处理. 删除包含内容的信息 sed ...
- 没有虚拟DOM版本的vue(Vue Vapor)
前言 随着Svelte和SolidJS的流行,无虚拟DOM模式逐渐开始火了起来.vue也推出了无虚拟DOM模式的版本,就是我们今天要讲的Vue Vapor. 什么是Vue Vapor Vue Vapo ...