LeetCode#525-连续数组-前缀和
package shuzu; import org.omg.CORBA.MARSHAL; import java.util.HashMap; import java.util.Map; /* 525. 连续数组 给定一个二进制数组, 找到含有相同数量的 0 和 1 的最长连续子数组(的长度)。 示例 1: 输入: [0,1] 输出: 2 说明: [0, 1] 是具有相同数量0和1的最长连续子数组。 示例 2: 输入: [0,1,0] 输出: 2 说明: [0, 1] (或 [1, 0]) 是具有相同数量0和1的最长连续子数组。 注意: 给定的二进制数组的长度不会超过50000。 解题思路: //假设[i,j]满足要求,则1的个数为j-i/2 //所以我们可以等效转化为前缀和来解决 前缀和 遇见1count++ 遇见0count-- */ public class p525 { public static int findMaxLength(int[] nums) { int ans=0; HashMap<Integer,Integer> map=new HashMap();//键为count,值为下标 int sum_i=0; map.put(0,-1); for(int i=0;i<nums.length;i++){ nums[i]=nums[i]==1?1:-1; sum_i+=nums[i]; if(map.containsKey(sum_i)){ ans= Math.max(ans,i-map.get(sum_i)); } else { map.put(sum_i,i); } } return ans; } public static void main(String[] args) { int nums[]={0,0,1,0,0,0,1,1}; System.out.println(findMaxLength(nums)); } }
运行结果: