今天是简单题了,果然昨天是针对我们单身狗
LeetCode上最大连续1的个数,简单难度,用滑动窗口解决即可
给一个传入的数组只包含0/1,求这个数组中最长的连续1,这里用两个指针的滑动窗口来解决就可以了。
- 设置2个
left
和right
指针,都从0开始,right++
来扩展窗口 - 每次扩展的时候都判断
nums[right]
是否为0 - 如果为1,那么这个窗口就加入窗口,并且
right
继续扩展 - 如果为0,那么这个窗口就要停止扩张,记录下当前窗口大小,并且将
left
移动到right
的位置,之后重复第2步,直到遍历完这个数组 - 每次计算为0的时候,都拿当前窗口的长度和之前保存的窗口长度比大小,保存最长的
- 最后返回这个值就是结果
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
}
还可以用join
和split
的方法来分解数组
- 先用join把数组连接起来,之后用split(0)来分解字符串
- 返回所有数组中长度最长的那个数组长度即可
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
}