2022-7-22 剑指offer-前缀和+hash

剑指 Offer II 011. 0 和 1 个数相同的子数组

难度中等

给定一个二进制数组 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记录的是最前面的索引。

posted on 2022-07-22 16:49  阿ming  阅读(17)  评论(0编辑  收藏  举报

导航