剑指OfferII011.0和1个数相同的子数组

题目

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

示例 1:输入: nums = [0,1] 输出: 2

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

示例 2:输入: nums = [0,1,0] 输出: 2

说明: [0, 1] (或 [1, 0]) 是具有相同数量 0 和 1 的最长连续子数组。

提示:1 <= nums.length <= 105

nums[i] 不是 0 就是 1

注意:本题与主站 525 题相同

解题思路分析

1、前缀和;时间复杂度O(n),空间复杂度O(n)

剑指OfferII011.0和1个数相同的子数组

func findMaxLength(nums []int) int {
   res := 0
   m := make(map[int]int)
   m[0] = -1
   total := 0
   for i := 0; i < len(nums); i++ {
      if nums[i] == 0 {
         total--
      } else {
         total++
      }
      if first, ok := m[total]; !ok {
         m[total] = i
      } else {
         if i-first > res {
            res = i - first
         }
      }
   }
   return res
}

总结

Medium题目,题目同 leetcode 525.连续数组

展开阅读全文

页面更新:2024-04-02

标签:数组   本题   复杂度   前缀   示例   长度   个数   最长   题目   思路   数量   提示   时间   科技   空间

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top