前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PAT 1041 Be Unique (20分)利用数组找出只出现一次的数字

PAT 1041 Be Unique (20分)利用数组找出只出现一次的数字

作者头像
vivi
发布2020-07-14 10:58:26
3260
发布2020-07-14 10:58:26
举报
文章被收录于专栏:vblogvblog

题目

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,10​4 ]. 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 (≤10​5​​ ) 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:

代码语言:javascript
复制
7 5 31 5 88 67 88 17

Sample Output 1:

代码语言:javascript
复制
31

Sample Input 2:

代码语言:javascript
复制
5 888 666 666 888 888

Sample Output 2:

代码语言:javascript
复制
None

题目解读

给出N个正整数,找出第一个只出现了一次的数字,比如 5 31 5 88 67 88 1731,67,17都只出现了一次,但是31是第一个,所以输出31;如果没有唯一的数字,输出 None

思路很简单:利用一个整型数组统计每个数字出现的次数,找出第一个次数为1的数字并输出。

因为这些数字本身在输入中是无序的,因此不能直接用数字做下标,次数做值,这样会导致结果错误,比如上面那个例子 5 31 5 88 67 88 17,若用数字本身做下标,17会排在前面,最后会输出17.

因此设计两个数组num[]保存出现按顺序的这些数字,count[]保存这些数字出现的次数,最后只需要这样遍历:

代码语言:javascript
复制
    // 判断第一个只出现了一次的数字
    for(int i = 0; i < n; i++) {
        if(count[num[i]] == 1) {
            printf("%d", num[i]);
            return 0;
        }
    }

num[]本身按顺序读取输入并存储保证了数字的有序性。

完整代码

代码语言:javascript
复制
#include <cstdio>
using namespace std;

int num[100000], count[100000];

int main() {
    int n;
    scanf("%d", &n);
    int x;
    for(int i = 0; i < n; i++) {
        // 当前数字
        scanf("%d", &num[i]);
        // 当前数字出现的次数
        count[num[i]]++;
    }
    // 判断第一个只出现了一次的数字
    for(int i = 0; i < n; i++) {
        if(count[num[i]] == 1) {
            printf("%d", num[i]);
            return 0;
        }
    }
    // 都重复,输出 None
    printf("None");
    return 0;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-06-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目
  • 题目解读
  • 完整代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档