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 }