大家好,我是开车的阿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; // 返回出现次数最多且最大的体重作为众数 } };