0
点赞
收藏
分享

微信扫一扫

LeetCode练习27:0和1个数相同的子数组

静悠 2022-04-03 阅读 78

LeetCode链接:力扣

题目:

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

示例:

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

代码:

class Solution {
    public int findMaxLength(int[] nums) {
        Map<Integer,Integer> map = new HashMap<Integer,Integer>();
        int n = nums.length;
        int count = 0;          //用于计算前缀和
        int maxLength = 0;
        map.put(0,-1);      //因为假设元素是0的时候就当成-1,所以当01数量相同的时候,前缀和为0,为使遇到前缀和为0的时候为最大maxLength,所以设置为-1。
        for(int i = 0; i < n; ++i){
            if(nums[i] == 0){
                count--;
            }else if(nums[i] == 1){
                count++;
            }
            
            if(map.containsKey(count)){
                int prevIndex = map.get(count);
                //如果前缀和为0的时候,maxLength才是最大的,其他的都是减去他的下标。
                maxLength = Math.max(i - prevIndex, maxLength);
            }else{  //如果前缀和不为0时,将前缀和加入mashmap里
                map.put(count, i);
            }

        }
        return maxLength;
    }
}

举报

相关推荐

0 条评论