用C++解决以下问题请特别注意程序运行空间限制为1MB:班级中有n名同学一次考试中Su_Zipei 出了若干道题给大家做并让大家投票选出心目中的好题每人只能投一票。得出投票结果后Su_Zipei 发现有且仅有一道题的得票数超过半数给出投票结果你能找出是哪道题得票数超过半数了吗?输入格式第一行一个整数n第二行n个整数 表示第i名同学的投票a_i输出格式一个整数表示好题的编号数据范围对于100的数据
一种解决方法是使用哈希表来统计每道题的得票数。首先,我们定义一个哈希表,键为题目编号,值为得票数。然后,遍历投票结果,将每个同学投的票数加到对应题目的得票数上。最后,再遍历哈希表,找到得票数超过半数的题目编号。
具体实现如下:
#include <iostream>
#include <unordered_map>
using namespace std;
int main() {
int n;
cin >> n;
unordered_map<int, int> votes; // 定义哈希表
for (int i = 0; i < n; i++) {
int vote;
cin >> vote;
votes[vote]++; // 将每个同学投的票数加到对应题目的得票数上
}
int half = n / 2; // 半数
for (auto it = votes.begin(); it != votes.end(); ++it) {
if (it->second > half) { // 找到得票数超过半数的题目编号
cout << it->first << endl;
break;
}
}
return 0;
}
该解决方法的时间复杂度为 O(n),空间复杂度为 O(n)。由于题目给定程序运行空间限制为1MB,因此该解决方法在题目范围内可以正常运行
原文地址: https://www.cveoy.top/t/topic/iopu 著作权归作者所有。请勿转载和采集!