前言
算法的力量是伟大的
正文
问题来源
本问题来自leetcode上的525题。用go语言做的
问题描述
给定一个二进制数组, 找到含有相同数量的 0 和 1 的最长连续子数组。(只包含0、1)
示例 1:
输入: [0,1]
输出: 2
说明: [0, 1] 是具有相同数量0和1的最长连续子数组。
示例 2:
输入: [0,1,0]
输出: 2
说明: [0, 1] (或 [1, 0]) 是具有相同数量0和1的最长连续子数组。
分析:
认为0对应的数值为-1,1对应的值是1,将所有的数字记录一个和。如果上次出现过相同的sum值,则这段区域内0和1的个数是相等的,求出这段跨度。然后根据是否大于当前最大值,决定是否更新最大值。 本人写的Go代码如下:
func findMaxLength(nums []int) int {
l := len(nums)
m := make(map[int]int)
sum := 0
max := 0
//别忘了初始化
m[0] = -1
for i := 0; i < l; i++ {
if nums[i] == 0 {
sum -= 1
} else {
sum += 1
}
a, ok := m[sum]
if ok {
if i-a > max {
max = i - a
}
} else {
m[sum] = i
}
}
return max
}
总结:
勤思考
结语
不管怎么样好好加油。