
image.png
解法
巧妙地将0转换成-1,利用counter记录前缀和所在的位置,这样两个相同的前缀和之间的长度就是连续的相同数据的0和1.
class Solution {
public int findMaxLength(int[] nums) {
int maxLength = 0;
Map<Integer, Integer> map = new HashMap<>();
int counter = 0;
map.put(counter, -1);
for (int i = 0; i < nums.length; i++) {
int num = nums[i];
if (num == 0) {
counter += -1;
} else {
counter += 1;
}
if (map.containsKey(counter)) {
maxLength = Math.max(maxLength, i - map.get(counter));
} else {
map.put(counter, i);
}
}
return maxLength;
}
}