每日一题-LeetCode(485)最大连续1的个数

39 阅读1分钟

本文首发小呆&小萌的情侣博客,两个前端的学习生活分享小天地,欢迎关注收藏。

今天是小呆刷题的第12天,今天的题目是:力扣(LeetCode)的第485题,最大连续1的个数

题目要求

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

示例:

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

提示:

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

解题思路

这道题还是比较简单的,题目要求计算最大连续的1的个数,那我们每遇到1个1,就计数一次,如果遇到0,说明中断了,就重新计数,最后返回计数的值就可以了。由于重新计数会覆盖之前的计数,所以还需要额外的一个变量来储存返回值。老规矩,哪怕再简单的题,一图胜千言。

最大连续1的个数

/**
 * @param {number[]} nums
 * @return {number}
 */
var findMaxConsecutiveOnes = function(nums) {
	let count = 0, result = 0
  for(let num of nums) {
    if(num === 1) {
      count++
    } else {
      result = result > count ? result : count
      count = 0
    }
  }
  return result > count ? result : count
};

除了上面的解法,评论区的东冬d的思路也非常的有意思,可惜小呆(数学渣渣)没想到啊。这位同学的思路是这样的:

  1. 由于数组中只有01,由于0乘任何数等于0,1乘任何数等于1
  2. 循环数组时,加上当前数字再乘以当前数字,等同于遇一加一,遇零清零
/**
 * @param {number[]} nums
 * @return {number}
 */
var findMaxConsecutiveOnes = function(nums) {
  let cur = 0, maximum = 0
  for(let num in nums) {
    cur = (cur + num) * num
    if(cur > maximum) {
      maximum = cur
    }
  }
  return maximum
};

小结

其实不难看出,做题的思维,有些时候往往就隔着一层纱,不断拓宽的视野,丰富的知识掌握,会让刷题的过程有意向不到的收获~加油吧!

引用

力扣LeetCode的第485题-最大连续1的个数