leetcode525连续数组

leetcode525Contiguous Array

Posted by BY on August 24, 2018

前言

算法的力量是伟大的

正文

问题来源

本问题来自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
}

总结:

勤思考

结语

不管怎么样好好加油。