【Day38】525.连续数组

525. 连续数组

给定一个二进制数组 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

题解:

前缀和+哈希

class Solution {
public:
    int findMaxLength(vector& nums) {
        for (auto& num : nums) {
            num = num == 0 ? -1 : num;
        }
        map m;
        int sum = 0, ans = 0;
        for (int i = 0; i < nums.size(); i++) {
            sum += nums[i];
            if (sum == 0) {
                ans = i + 1;
            }
            if (m.count(sum)) {
                ans = max(i - m[sum], ans);
            } else {
                m[sum] = i;
            }
        }
        return ans;
    }
};

   转载规则


《【Day38】525.连续数组》 Tyzhao 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
【Day39】160.相交链表 【Day39】160.相交链表
160. 相交链表给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。 图示两个链表在节点 c1 开始相交: 题目数据 保证 整个链式结构中不存在环。 注意
2021-06-04
下一篇 
【Day37】523.连续的子数组和 【Day37】523.连续的子数组和
523. 连续的子数组和给你一个整数数组 nums 和一个整数 k ,编写一个函数来判断该数组是否含有同时满足下述条件的连续子数组: 子数组大小 至少为 2 ,且 子数组元素总和为 k 的倍数。 如果存在,返回 true ;否则,返回
2021-06-02
  目录