不同正整数的个数

203 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

题目描述

给定 n 个非负整数 a1,a2,…,an。

请你计算其中共有多少个不同正整数

输入格式

第一行包含整数 n。

第二行包含 n 个非负整数 a1,a2,…,an。

保证至少存在一个正整数。

输出格式

一个整数,表示其中不同正整数的数量。

数据范围

前三个测试点满足 1≤n≤5。 所有测试点满足 1≤n≤100,0≤ai≤600。

输入样例1:

4
1 3 3 2

输出样例1:

3

输入样例2:

3
1 1 1

输出样例2:

1

输入样例3:

4
42 0 0 42

输出样例3:

1

思路

这道题目的意思是给定一个数组,让我们输出其中所有的非负整数的数量(重复的数字记一次)。很显然这道题就是考察我们的去重能力。我们可以使用数组模拟哈希表进行去重,但是要注意所有数字的范围,开的哈希数组的长度一定需要大于这个范围,否则会出现哈希失败的情况。在这个基础上我们也可以使用c++自带的set集合进行求解。

代码

#include <iostream>
​
using namespace std;
​
const int N = 110;
​
int q[N], s[N];
int n;
​
int main()
{
    cin >> n;
    for(int i = 0 ;i < n;i ++){
​
      cin >> q[i];
      s[i] == 0;
    } 
    for(int i = 0;i < n;i ++)
    {
        // 把所有的非负正数放入哈希表中,如果放入的位置不为0,说明已经存在重复,那不加入
        if(q[i] > 0 && s[q[i]] == 0) s[q[i]] ++;
    }
    int res = 0;
    for(int i = 0;i < n;i ++){
        //cout << s[i] << ' ' << endl;
        res += s[i];
    }
​
    cout << res << endl;
    return 0;
}