前几天在忙其他事,鸽了
试题 历届真题 修改数组【第十届】【省赛】【A组】![](https://i-blog.csdnimg.cn/blog_migrate/e070f43f89e970f6098b36c677d1c145.png)
这题不知道怎么评价...下面是我的思路就是判断在前面就没有出现,有就+1,加到不重复为止。
n = int(input())
lst = input().split()
for i in range(n):
lst[i] = int(lst[i])
for i in range(1,n):
if lst[i] in lst[:i]:
while True:
if lst[i] in lst[:i]:
lst[i] = lst[i] + 1
else:
break
for i in lst:
print(i,end = ' ')
结果果然超时,过30%。
然后上网查题解,看C++的解法,过40%
#include<set>
#include<iostream>
#include<string.h>
using namespace std;
set<int> s;
int main()
{
int n;
int a[100000];
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> a[i];
while(s.count(a[i]) ==1)//如果s中有这个数
{
a[i]++;//有这个数就+1
}
s.insert(a[i]);
cout << a[i] << " ";
}
system("pause");
return 0;
}
好了,这下也不是语言的问题了。
再找找发现要用到并查集,行了,不会了,abandon