2022-7-22 剑指offer-前缀和+hash
给定一个二进制数组 nums
, 找到含有相同数量的 0
和 1
的最长连续子数组,并返回该子数组的长度。
1 class Solution { 2 public int findMaxLength(int[] nums) { 3 int n=nums.length; 4 Map<Integer,Integer> map=new HashMap<>(); 5 int count=0,ans=0; 6 map.put(0,-1); 7 for (int i=0;i<n;i++){ 8 count+=nums[i]==0?-1:1; 9 if (!map.containsKey(count)){ 10 map.put(count,i); 11 }else{ 12 ans=Math.max(ans,i-map.get(count)); 13 } 14 } 15 return ans; 16 } 17 }
思路:0和1可以变成-1和1,转化为和为0的子数组,于是就和之前的和为k的子数组一样,但是要求最长,所以hash记录的是最前面的索引。