这道题需要用t哈希表的知识,首先哈希表是哈希表 又称散列表 他和邻接表不是一个东西 但它们都用表的方式完成的。不要把他们搞混淆。
然后我们先看一看什么是哈希表 之前网课没有听课的同学 现在要听一听了带你快速理解 哈希表(散列表)的运作原理_哔哩哔哩_bilibili
10 完成一半题目
作者: Turbo时间限制: 1S章节: 课程设计
问题描述 :
有 N 位扣友参加了微软与力扣举办的「以扣会友」线下活动。主办方提供了 2*N 道题目,整型数组 questions 中每个数字对应了每道题目所涉及的知识点类型。
若每位扣友选择不同的一题,请返回被选的 N 道题目至少包含多少种知识点类型。
示例 1:
输入:
4
2 1 6 2
输出:1
解释:共有 2 位扣友,在 4 道题目中选择 2 题。
可选择完成知识点类型为 2 的题目时,此时仅一种知识点类型,因此至少包含 1 种知识点类型。
示例 2:
输入:
12
1 5 1 3 4 5 2 5 3 3 8 6
输出:2
解释:共有 6 位扣友,在 12 道题目中选择题目,需要选择 6 题。
3位选择完成知识点类型为 3 的题目,3位选择完成知识点类型为 5 的题目,因此至少包含 2 种知识点类型。
输入说明 :
输入两行:
第一行为一个整数n代表数组questions的长度,n=2*N,N为扣友的数量。
第二行输入n个整数代表数组questions的元素。
提示:
2 <= n <= 10^5
1 <= questions[i] <= 1000
输出一个整数表示结果。
输入范例 :
6
1 2 3 4 5 1
输出说明 :
2
- #include<iostream>
- #include<algorithm>
- using namespace std;
- bool cmp(int x, int y)
- {
- return x > y;
- }
- int main()
- {
- int arr[100001] = { 0 };
- int haxi[100001] = { 0 };
- int n = 0;
- cin >> n;
- for (int i = 0; i < n; i++)
- {
- cin >> arr[i];
- haxi[arr[i]]++;
- }
- int people = n / 2;
- sort(haxi, haxi+1000,cmp);
- int total = 0;
- for (int i = 0; i < 1000; i++)
- {
- if (people > 0)
- {
- people -= haxi[i];
- total++;
- }
- else
- {
- break;
- }
-
- }
- cout << total << endl;
- return 0;
- }