大家好,我是开车的阿Q,自动驾驶的时代已经到来,没时间解释了,快和阿Q一起上车。作为自动驾驶系统工程师,必须要有最好的C++基础,让我们来一起刷题吧。
题目考察的知识点
本题考察如何找到一组有序数组中的众数。
题目解答方法的文字分析
由于牛群A和牛群B的牛都按照体重从小到大进行排序,我们可以使用两个指针来遍历数组,并统计每个体重出现的次数。
具体步骤如下:
- 使用两个指针p1和p2,分别指向weightsA和weightsB的开头。
- 使用unordered_map记录每个体重出现的次数,键为体重,值为出现次数。
- 遍历weightsA和weightsB,统计每个体重的出现次数。
- 找到出现次数最多的次数max_count。
- 遍历哈希表,找到出现次数等于max_count的所有体重,并记录最大的体重max_weight。
- 返回max_weight作为众数。
本题解析所用的编程语言 (C++)
C++
完整且正确的编程代码
class Solution {
public:
    int findMode(vector<int>& weightsA, vector<int>& weightsB) {
        unordered_map<int, int> count_map; // 记录每个体重出现的次数
        int p1 = 0; // 指向weightsA的指针
        int p2 = 0; // 指向weightsB的指针
        while (p1 < weightsA.size() && p2 < weightsB.size()) {
            int weightA = weightsA[p1];
            int weightB = weightsB[p2];
            if (weightA < weightB) {
                count_map[weightA]++; // weightA的次数加1
                p1++; // 移动p1指针,指向下一个元素
            } else if (weightA > weightB) {
                count_map[weightB]++; // weightB的次数加1
                p2++; // 移动p2指针,指向下一个元素
            } else {
                count_map[weightA]++; // weightA的次数加1
                count_map[weightB]++; // weightB的次数加1
                p1++; // 同时移动p1和p2指针,指向下一个元素
                p2++;
            }
        }
        // 处理weightsA和weightsB中剩余的元素
        while (p1 < weightsA.size()) {
            count_map[weightsA[p1]]++; // weightA的次数加1
            p1++;
        }
        while (p2 < weightsB.size()) {
            count_map[weightsB[p2]]++; // weightB的次数加1
            p2++;
        }
        int max_count = 0; // 出现次数最多的次数
        for (auto& [weight, count] : count_map) {
            max_count = max(max_count, count); // 更新出现次数最多的次数
        }
        int max_weight = -1; // 出现次数最多的体重
        for (auto& [weight, count] : count_map) {
            if (count == max_count) {
                max_weight = max(max_weight, weight); // 更新出现次数最多的体重
            }
        }
        return max_weight; // 返回出现次数最多且最大的体重作为众数
    }
};

 京公网安备 11010502036488号
京公网安备 11010502036488号