您的位置:首页 > 教育 > 培训 > 公司介绍模板图片_做了5天游戏推广被抓了_seo关键字优化价格_关键词搜索优化外包

公司介绍模板图片_做了5天游戏推广被抓了_seo关键字优化价格_关键词搜索优化外包

2025/3/22 5:22:09 来源:https://blog.csdn.net/2301_81772249/article/details/146414090  浏览:    关键词:公司介绍模板图片_做了5天游戏推广被抓了_seo关键字优化价格_关键词搜索优化外包
公司介绍模板图片_做了5天游戏推广被抓了_seo关键字优化价格_关键词搜索优化外包

这题就是找出来男女相等的最长子数组,其实我们可以这么做,我们把男生不变,女生变成-1,如果区间和是0的话,就是符合要求的连续子数组了

我们可以用前缀和来做,但是如果某个下标的前缀和不是0,我们就要舍弃前面的一些值,我们可以用哈希表记录一下出现过的值,如果恰巧有相等的,相减之后不就是我们要的东西了吗?

我们遍历前缀和,如果前缀和刚好为0,它就是符合要求的,长度就是i,为了简化我们的代码,我们直接把0,0插入到哈希表里面,如果有前缀和为0.就让它减0,刚好是长度

如果是别的数,我们可以找找哈希表出现过这个数没,出现的话还是减去下标,就是我们符合要求的子数组了

#include <iostream>
#include <unordered_map>
using namespace std;
int n;const int N = 1e5+10;
int f[N];
unordered_map<int,int> mp;//第一个记录出现过的值,第二个记录下标 
int main()
{cin >> n;mp[0] = 0;int ret = 0;for(int i=1;i<=n;i++){int x;cin>>x;x=x==0 ? -1 : 1;f[i]=f[i-1]+x;if(mp.count(f[i])){ret=max(ret,i-mp[f[i]]);continue;}mp[f[i]]=i;}cout << ret << endl;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com