- 连续数组
这道题和6-2的每日一题思路(6-2每日一题)比较相似,都是利用前缀和+哈希表进行求解
我们设在nums[i]前每有一个1,那么前缀+1,每有一个零,那么前缀-1,那么如果在nums[i]-nums[j]之间0 1数量相等,则前缀也一定相等
举个例子
由图我们可以看出,有两组前缀和相等,之后在利用下标求出长度即可。
特殊情况:
在这种情况下,0只出现了一次,但是我们必须考虑这种情况所以在最开始预设一个mp[0]=-1
计算长度为3-()-1=4
class Solution {
public:
int findMaxLength(vector<int>& nums) {
unordered_map<int,int >mp;
int n=nums.size();
int res=0;
int pos=0;
mp[0]=-1;
for(int i=0;i<n;i++)
{
if(nums[i]==0)
{
pos++;
}
else
{
pos--;
}
if(mp.count(pos))
{
res=max(res,(i-mp[pos]));
}
else{
mp[pos]=i;
}
}
return res;
}
};