class Solution {
public:
//前缀和加哈希表,将0替换为-1并求前缀和,将前缀和中初次出现的数字位置保存下来,然后最后出现减去初次出现位置即为最长
int findMaxLength(vector<int>& nums) {
int n = nums.size();
int lng = 0;
vector<int> vi(n+1,0);
for(int i=1;i<n+1;++i){
int d = nums[i-1]==1?1:-1;
vi[i] = vi[i-1] + d;
}
unordered_map<int,int> mii;
for(int i=0;i<n+1;++i){
if(mii.find(vi[i])!=mii.end()){
lng = max(lng,i-mii[vi[i]]);
}else{
mii[vi[i]] = i;
}
}
return lng;
}
};
剑指 Offer II 011. 0 和 1 个数相同的子数组
最新推荐文章于 2022-07-15 09:21:10 发布