这道题需要用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;
}