大家好,我是开车的阿Q,自动驾驶的时代已经到来,没时间解释了,快和阿Q一起上车。作为自动驾驶系统工程师,必须要有最好的C++基础,让我们来一起刷题吧。

题目考察的知识点

  • 哈希表的使用
  • 数组的遍历和操作

题目解答方法的文字分析

本题要求找出每次新牛加入后牛群中的众数。为了解决这个问题,我们使用哈希表来记录每个数字的出现次数,并在遍历过程中找到出现次数最多的数字,以及如果有多个编号的牛数量相同,则返回编号最大的那一个。

具体步骤如下:

  1. 创建一个unordered_map来记录每个数字的出现次数。
  2. 遍历输入的nums数组,对每个元素进行如下操作:将当前数字放入哈希表hashMap中,如果已存在,则出现次数加1,如果不存在,则加入新的键值对,出现次数初始化为1。遍历哈希表,找到当前出现频率最高的数字,并记录其出现次数max和值number。如果有多个编号的牛数量相同,则返回编号最大的那一个。将当前数字的众数number存入结果数组result中。
  3. 完成遍历后,返回结果数组。

本题解析所用的编程语言

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;
    }
};

您的关注、点赞、收藏就是我创作的动力,三连支持阿Q!