题解 | #草原上优势牛种#
草原上优势牛种
https://www.nowcoder.com/practice/178705f48adc4e39ac8537a22e8941cd
大家好,我是开车的阿Q,自动驾驶的时代已经到来,没时间解释了,快和阿Q一起上车。作为自动驾驶系统工程师,必须要有最好的C++基础,让我们来一起刷题吧。
题目考察的知识点
这道题目考察的是在一个数组中找到数量超过一半的某个元素。
题目解答方法的文字分析
题目要求我们找到数量超过一半的优势牛种。由于优势牛种的数量超过一半,那么最简单的方法就是使用摩尔投票算法。摩尔投票算法可以在线性时间内找到数组中数量超过一半的元素。
思路:
- 初始化两个变量
candidate
和count
,分别用于存储候选优势牛种和其对应的票数。 - 遍历数组,对于每一个元素:如果 count 为 0,将当前元素设置为候选优势牛种,同时将 count 设为 1。如果当前元素与候选优势牛种相同,将 count 增加 1。如果当前元素与候选优势牛种不同,将 count 减少 1。
- 最后得到的候选优势牛种即为答案。
本题解析所用的编程语言 (C++)
本题解析所用的编程语言是 C++。
完整且正确的编程代码
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return int整型 */ int majority_cow(vector<int>& nums) { // 初始化候选优势牛种和对应的票数 int candidate = 0; // 候选优势牛种 int count = 0; // 当前候选牛种的票数 // 遍历数组中的每个元素 for (int num : nums) { if (count == 0) { // 如果当前候选牛种的票数为 0,将当前元素设为候选牛种 candidate = num; count = 1; } else if (num == candidate) { // 如果当前元素与候选牛种相同,票数增加 count++; } else { // 如果当前元素与候选牛种不同,票数减少 count--; } } // 返回最终的候选优势牛种 return candidate; } };
阿Q的题解 文章被收录于专栏
阿Q秋招刷过的题