1. 程式人生 > >PAT-ADVANCED1041——Be Unique

PAT-ADVANCED1041——Be Unique

題目描述:

題目翻譯:

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++解題報告: