解题过程的小记录,如有错误欢迎指出。
难度:二星(明白Unique代表的意思的话就不难)
题目分析
找出给出的一堆数中的第一个唯一出现过一次的数字,如果没有数字是唯一出现,就输出为None
注意点
- Be Unique是指唯一出现一次
我的解题过程
思路
把数字按顺序压入vector数组,同时用hash表记录出现的次数。
再次循环一次vector数组,找出第一个只出现一次的数字。
bug
刚开始不理解Be Unique的意思,以为是找素数,还在疑惑这哪里用到hash表了咳咳。不过写成找素数也能过两个测试点,说明这种游戏猜素数赢得可能性比较大(bushi
代码
#include<iostream>
#include<vector>
#include<math.h>
using namespace std;
int main()
{
int N;
cin >> N;
vector<int> nums(N);
int hash[10005] = { 0 };
for (int i = 0;i < N; i++) {
int num;
cin >> num;
nums.push_back(num);
hash[num]++;
}
int i = 0;
for (i; i < nums.size(); i++) {
if (hash[nums[i]] == 1) {
cout << nums[i];
break;
}
}
if (i == nums.size()) cout << "None";
return 0;
}
dalao的代码
全部代码因版权原因不放出来,大家可以自行去柳神博客购买或者参考晴神的上机笔记~
借鉴点
- 我这题采用cin也没有超时,如果超时的话可以改用scanf
- 如果输出某个数后直接结束程序,可以直接return 0,不需要break跳出再判断条件
for(int i = 0; i < n; i++) {
if(m[a[i]] == 1) {
printf("%d", a[i]);
return 0;
}
}
printf("None");
return 0;