Being unique is so important to people on Mars that even their lottery is designed in a unique way. The rule of winning is simple: one bets on a number chosen from [1, 104]. The first one who bets on a unique number wins. For example, if there are 7 people betting on 5 31 5 88 67 88 17, then the second one who bets on 31 wins.
Input Specification:
Each input file contains one test case. Each case contains a line which begins with a positive integer N (<=105) and then followed by N bets. The numbers are separated by a space.
Output Specification:
For each test case, print the winning number in a line. If there is no winner, print "None" instead.
Sample Input 1:7 5 31 5 88 67 88 17Sample Output 1:
31Sample Input 2:
5 888 666 666 888 888Sample Output 2:
None
#include<iostream> #include<vector> using namespace std; int main() { int N, num; vector<int>vec; int res = 0; scanf("%d",&N); for (int i = 0; i < N; ++i) { scanf("%d",&num); vec.push_back(num); } for (int i = 0; i < vec.size(); ++i) { int j = 0; for (j = 0; j < vec.size(); ++j) { if (i == j) continue; if (vec[i] == vec[j]) { break; } } if (j == vec.size()) { res = vec[i]; break; } } if (res!=0) printf("%d", res); else printf("%s","None"); }
上面的代码还有两个小测试点是超时的,也就是还有优化的空间. 通过加入一个辅助的set,记录下检测过的已经重复的元素,然后再检测当前元素之前进行一个判断,看当前元素是属于辅助的set,也就是说不进行相同元素的重新检测,因此问题得到的优化,测试全部通过.
#include<iostream> #include<vector> #include<set> using namespace std; int main() { int N, num; vector<int>vec; set<int> s; int res = 0; scanf("%d", &N); for (int i = 0; i < N; ++i) { scanf("%d", &num); vec.push_back(num); } for (int i = 0; i < vec.size(); ++i) { set<int>::iterator s_it = s.find(vec[i]); if (s_it != s.end()) continue; int j = 0; for (j = i+1; j < vec.size(); ++j) { if (vec[i] == vec[j]) { s.insert(vec[i]); break; } } if (j == vec.size()) { res = vec[i]; break; } } if (res != 0) printf("%d", res); else printf("%s", "None"); }