• [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;
        }
    }
    
  • 相关阅读:
    JavaScrip 数组/字典/循环
    初识javaScript
    css内容补充之其它
    position
    css的存在形式
    CSS选择器
    Html的Head内标签
    Linux设置FQDN
    saltstack 全面介绍
    jQuery文档处理
  • 原文地址:https://www.cnblogs.com/acbingo/p/14856902.html
Copyright © 2020-2023  润新知