大家好,我是开车的阿Q,自动驾驶的时代已经到来,没时间解释了,快和阿Q一起上车。作为自动驾驶系统工程师,必须要有最好的C++基础,让我们来一起刷题吧。
题目考察的知识点
- 哈希表的使用
- 数组的遍历和操作
题目解答方法的文字分析
本题要求找出每次新牛加入后牛群中的众数。为了解决这个问题,我们使用哈希表来记录每个数字的出现次数,并在遍历过程中找到出现次数最多的数字,以及如果有多个编号的牛数量相同,则返回编号最大的那一个。
具体步骤如下:
- 创建一个
unordered_map
来记录每个数字的出现次数。 - 遍历输入的
nums
数组,对每个元素进行如下操作:将当前数字放入哈希表hashMap中,如果已存在,则出现次数加1,如果不存在,则加入新的键值对,出现次数初始化为1。遍历哈希表,找到当前出现频率最高的数字,并记录其出现次数max和值number。如果有多个编号的牛数量相同,则返回编号最大的那一个。将当前数字的众数number存入结果数组result中。 - 完成遍历后,返回结果数组。
本题解析所用的编程语言
C++
完整且正确的编程代码
#include <vector> #include <unordered_map> using namespace std; class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型一维数组 * @return int整型一维数组 */ vector<int> findMode(vector<int>& nums) { // 创建一个哈希表,用于记录每个数字的出现次数 unordered_map<int, int> hashMap; // 创建结果数组,初始值设为0 vector<int> result(nums.size(), 0); // 遍历输入数组 nums for (int i = 0; i < nums.size(); i++) { // 将当前数字放入哈希表,如果已存在,则出现次数加1,如果不存在,则加入新的键值对,出现次数初始化为1。 hashMap[nums[i]]++; // 记录最大出现次数和对应的数字 int max = 0; int number = 0; // 遍历哈希表,找到当前出现频率最高的数字,并记录其出现次数 max 和值 number。 for (auto& entry : hashMap) { int value = entry.second; if (value > max) { max = value; number = entry.first; } //如果有多个编号的牛数量相同,则返回编号最大的那一个。 if (value = max && entry.first > number) { number = entry.first; } } result[i] = number; } // 完成遍历后,返回结果数组。 return result; } };