[LeetCode] 525. 连续数组

Posted ACBingo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[LeetCode] 525. 连续数组相关的知识,希望对你有一定的参考价值。

我会把前缀和+HashMap刻在我的DNA里。

子数组中0的个数和1的个数相同。其实可以让0变成-1,那么问题是变成了子数组中和为0即满足题意。

sum[i]为前缀和。

如果sum[j] - sum[i] = 0,那么区间[i+1,j]构成的子数组即满足题意。

我们将<sum[i],i>的对应关系存到HashMap里,每当遍历到j时,利用HashMap判断之前存不存在过sum[j],存在就将第一次出现的i取出(因为要保证区间最长),更新最值既可。

525. 连续数组

class Solution {
    public int findMaxLength(int[] nums) {
        int n = nums.length;
        int[] sum = new int[n];

        for (int i=0;i<n;i++) {
            if (nums[i] == 0) {
                nums[i] = -1;
            }
        }

        Map<Integer, Integer> map = new HashMap<>();
        sum[0] = nums[0];
        map.put(sum[0], 0);
        map.put(0,-1);
        int ans = 0;
        for (int i=1;i<n;i++) {
            sum[i] = sum[i-1] + nums[i];
            if (map.get(sum[i])!=null) {
                ans = Math.max(ans, i - map.get(sum[i]));
            } else {
                map.put(sum[i], i);
            }
        }

        return ans;
    }
}

以上是关于[LeetCode] 525. 连续数组的主要内容,如果未能解决你的问题,请参考以下文章

leetcode-525连续数组

LeetCode525. 连续数组 / 牛客:雀魂启动!

leetcode No525 连续数组 java

[LeetCode] 525. 连续数组

⭐算法入门⭐《哈希表》中等01 —— LeetCode 525. 连续数组

LeetCode 525 连续数组[前缀和 哈希表] HERODING的LeetCode之路