zoukankan      html  css  js  c++  java
  • [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;
        }
    }
    
  • 相关阅读:
    依赖注入与控制反转
    Java NIO(三)
    Java NIO(二)
    Java NIO(一)
    Jetty 的基本架构
    spring IOC
    java代理
    spring AOP
    linux 添加用户并授权可以操作文件夹
    Centos6.5 yum 安装jdk1.8
  • 原文地址:https://www.cnblogs.com/acbingo/p/14856902.html
Copyright © 2011-2022 走看看