2021/02/15 每日一题 最大连续1的个数 (2种方法)

今天是简单题了,果然昨天是针对我们单身狗

LeetCode上最大连续1的个数,简单难度,用滑动窗口解决即可

给一个传入的数组只包含0/1,求这个数组中最长的连续1,这里用两个指针的滑动窗口来解决就可以了。

  1. 设置2个leftright指针,都从0开始,right++来扩展窗口
  2. 每次扩展的时候都判断nums[right]是否为0
  3. 如果为1,那么这个窗口就加入窗口,并且right继续扩展
  4. 如果为0,那么这个窗口就要停止扩张,记录下当前窗口大小,并且将left移动到right的位置,之后重复第2步,直到遍历完这个数组
  5. 每次计算为0的时候,都拿当前窗口的长度和之前保存的窗口长度比大小,保存最长的
  6. 最后返回这个值就是结果
var findMaxConsecutiveOnes = function(nums) {
   // 1. 设置两个指针
   let right = 0
   let left = 0
   // 记录当前窗口的值
   let window = 0
   // 记录当前最大的连续1
   let res = 0
   if(nums.length === 1) {
     if(nums[0] === 1) return 1
     if(nums[0] === 0) return 0 
   }
   // 2.遍历整个nums数组
   while(right < nums.length) {
     // 判断当前right对应的数据是否为1
     if(nums[right] === 0) {
       // 如果为0,那么这个窗口就扩展就到头了
       left = right
       // 重置当前窗口的大小
       window = 0
     } else {
       // 如果当前位置不为0,窗口大小+1
       window++
     }
     // 判断当前窗口大小和之前保存的大小之间谁大,保存大的那个
     res = Math.max(res,window)
    // 当前窗口扩张
     right++
   }
   return res
}

还可以用joinsplit的方法来分解数组

  1. 先用join把数组连接起来,之后用split(0)来分解字符串
  2. 返回所有数组中长度最长的那个数组长度即可
var findMaxConsecutiveOnes = function(nums) {
   // 1.连接数组
   let n = nums.join('')
   console.log(n);
   // 2. 通过split来分解n
   let arr = [...n.split(0)]
   console.log(arr);
   // 判断哪个长度最大即为结果
   let res = 0
   arr.forEach((x) => {
     res = Math.max(res,x.length)
   })
   return res
}

你可能感兴趣的:(2021/02/15 每日一题 最大连续1的个数 (2种方法))