525. Contiguous Array

Given a binary array, find the maximum length of a contiguous subarray with equal number of 0 and 1.

Example 1:

Input: [0,1]
Output: 2
Explanation: [0, 1] is the longest contiguous subarray with equal number of 0 and 1.

Example 2:

Input: [0,1,0]
Output: 2
Explanation: [0, 1] (or [1, 0]) is a longest contiguous subarray with equal number of 0 and 1.

Note: The length of the given binary array will not exceed 50,000.

本题和maximun size subarray sum equal k比较类似,这里有一个把0转换成-1来进行计算的过程,然后存储一个hashmap用来存放sum,如果接下来的sum在hashmap里面出现过,则说明hashmap里面出现的那个值的索引的开始(不包括索引),到目前的索引的和为0,代码如下:

 1 public class Solution {
 2     public int findMaxLength(int[] nums) {
 3         Map<Integer,Integer> map = new HashMap<Integer,Integer>();
 4         map.put(0,-1);
 5         int sum= 0;
 6         int max = 0;
 7         for(int i=0;i<nums.length;i++){
 8             if(nums[i]==0) nums[i]=-1;
 9             sum+=nums[i];
10             if(map.containsKey(sum)){
11                 max = Math.max(max,i-map.get(sum));
12             }else{
13                 map.put(sum,i);
14             }
15         }
16         return max;
17     }
18 }
原文地址:https://www.cnblogs.com/codeskiller/p/6500098.html