D. Rating Compression

题目链接
题意:给定一个数组n ,对于任意k从1到n,问满足获得的数组是否一个排列,例如1 5 3 4 2当k=2时获得的数组是1332则不满足排列,对于任意len,一个排列指的是所有数从1~len都出现且出现一次。
思路:
看的官方题解。。反正我是想不到,%一下斌学长一做就是官方题解复杂度 O ( n ) O(n) O(n),官方题意特判了一下k是1和n的情况,然后对于1<k<n,所有排列都是从1开始的,那么1只能出现的边界,然后开始迭代,维护l和r,最后判断l~r中间最小值是否满足i+1,如果ans[n-i+1]=1,然后可以发现是个类似递推。

#include<iostream>
#include<cstring>
using namespace std;
int cnt[300010];
int ans[300010];
int a[300010];
int n;
int main()
{
   
	int t;
	cin>>t;
	while(t--)
	{
   
		cin>>n;
		for(int i=1;i<=n;i++)
			ans[i]=cnt[i]=0;
		for(int i=1;i<=n;i++)
			cin>>a[i],cnt[a[i]]++;
		if(cnt[1]>=1)
			ans[n]=1;
		bool flag=true;
		for(int i=1;i<=n;i++)
			if(cnt[i]!=1)
			{
   
				flag=false;
				break;
			}
		if(flag)
			ans[1]=1;
		int l=1,r=n;	
		for(int i=1;i<n;i++)
		{
   
			if(!cnt[i])
			break;
			if(cnt[i]>1)
			break;
			if(a[l]==i && cnt[i+1])
			{
   
				l++;
				ans[n-i]=1;
			}
			else if(a[r]==i && cnt[i+1])
			{
   
				r--;
				ans[n-i]=1;
			}
			else
			{
   
				break;
			}
		}
		for(int i=1;i<=n;i++)
			cout<<ans[i];
			cout<<endl;
	}
	return 0;
}
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 长得好看会提高面试通过率吗? #
2842次浏览 41人参与
# HR最不可信的一句话是__ #
970次浏览 31人参与
# 巨人网络春招 #
11473次浏览 224人参与
# 春招至今,你的战绩如何? #
14263次浏览 133人参与
# AI面会问哪些问题? #
859次浏览 21人参与
# 你的实习产出是真实的还是包装的? #
2541次浏览 48人参与
# 米连集团26产品管培生项目 #
6979次浏览 224人参与
# 沪漂/北漂你觉得哪个更苦? #
1035次浏览 29人参与
# 你做过最难的笔试是哪家公司 #
1053次浏览 18人参与
# AI时代,哪个岗位还有“活路” #
2607次浏览 49人参与
# XX请雇我工作 #
51137次浏览 171人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
7931次浏览 43人参与
# 简历第一个项目做什么 #
32025次浏览 357人参与
# 简历中的项目经历要怎么写? #
310831次浏览 4256人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152767次浏览 888人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
187513次浏览 1123人参与
# AI时代,哪些岗位最容易被淘汰 #
64461次浏览 860人参与
# 如果重来一次你还会读研吗 #
229956次浏览 2011人参与
# 投格力的你,拿到offer了吗? #
178133次浏览 889人参与
# 你怎么看待AI面试 #
180592次浏览 1291人参与
# 正在春招的你,也参与了去年秋招吗? #
364089次浏览 2640人参与
# 腾讯音乐求职进展汇总 #
160802次浏览 1114人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务