大家好,我是开车的阿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;
}
};

京公网安备 11010502036488号