连续数组

给定一个二进制数组, 找到含有相同数量的 0 和 1 的最长连续子数组(的长度)。

1
2
3
输入: [0,1]
输出: 2
说明: [0, 1] 是具有相同数量0和1的最长连续子数组。

解决思路

把0当成-1,然后依次累加数组中的元素,记录每次求和不同的结果的下标。存入Map,如果遇到相同的值,当前下标减去Map中存在的下标即为最大的长度。(循环的思想)。所有要提前存放好Map(0,-1)

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/**
* @param {number[]} nums
* @return {number}
*/
var findMaxLength = function (nums) {
let map = new Map()
let count = 0
let maxLength = 0
map.set(0,-1)
for (let i = 0; i < nums.length; i++) {
if(nums[i]==0){
count -= 1
}else{
count+=1
}
if(!map.has(count)){
map.set(count,i)
}else{
maxLength = Math.max(maxLength,i - map.get(count))
}
}
return maxLength
};
文章作者: I年少有为
文章链接: https://lemonlife.top/2020/02/17/leetcode-525/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 I年少有为