我的PAT-ADVANCED代码仓:https://github.com/617076674/PAT-ADVANCED
原题链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805444361437184
题目描述:
题目翻译:
1041 独一无二
对火星人来说,独一无二是十分重要的,甚至它们的抽奖方式也是独一无二的。应的规则很简单:每个人压一个[1, 10 ^ 4]范围内的数字。第一个压到了独一无二数字的人赢。举个例子,如果有7个人,他们依次压了{5 31 5 88 67 88 17},那么第二个人,即压31的人赢了。
输入格式:
每个输入文件包含一个测试用例。对每个测试用例一行中以一个正整数N(<= 10 ^ 5)开头,紧跟着N个数代表这N个人的压法。数字由一个空格分隔。
输出格式:
对每个测试用例,在一行中打印出获胜者的数字。如果没有任何人获胜,打印None。
输入样例1:
7 5 31 5 88 67 88 17
输出样例1:
31
输入样例2:
5 888 666 666 888 888
输出样例2:
None
知识点:计数
思路:开一个大小为10001的数组来记录某个数字的出现次数
由于题目要求是第一个压到了独一无二数字的人赢,因此我们还需要用一个vector<int> nums来记录数字的顺序。
时间复杂度是O(N)。空间复杂度是O(10001)。
C++代码:
#include<iostream>
#include<vector>
using namespace std;
int main(){
int flag[10001];
fill(flag, flag + 10001, 0);
int N;
scanf("%d", &N);
int num;
vector<int> nums;
for(int i = 0; i < N; i++){
scanf("%d", &num);
nums.push_back(num);
flag[num]++;
}
int i = 0;
for(; i < N; i++){
if(flag[nums[i]] == 1){
printf("%d\n", nums[i]);
break;
}
}
if(i >= N){
printf("None\n");
}
return 0;
}
C++解题报告: