题解 | #草原上优势牛种#

草原上优势牛种

https://www.nowcoder.com/practice/178705f48adc4e39ac8537a22e8941cd

考察知识点:数组、摩尔投票算法

绝对众数:绝对众数就是一个在某个序列中个数超过序列中数的总个数的1/2的数。

题目分析:

题目中优势群种满足绝对众数的要求。可以使用摩尔投票算法,能很好的降低空间复杂度。

摩尔投票算法很好的利用了“众数的个数超过原序列中数的总数的一半”的性质,企图用众数与其他不是众数的任何数抵消掉:每次将一个众数和非众数同时删除的话,最终能剩下众数。

首先我们假设第一个数是众数,记录众数出现的次数并向后遍历,当遇到相同的数时,就记录该数又出现了一次。当遇到不同的数时,可能这个数是众数,也可能不是。我们还是保持之前的假设,但是要用记录的众数的次数减1,来抵消掉这个遍历到的数。

当记录的众数出现的次数为0时,说明可能不是众数,起码在遍历过的数(m个)中它没有出现1 / 2 * m次。此时我们就选择当下遍历到的数为众数。不必担心我们错误假设了众数,因为众数是非常多的,相抵消后得到的数就是众数。

所用编程语言:C++

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型vector 
     * @return int整型
     */
    int majority_cow(vector<int>& nums) {
        // write code here
        int size = nums.size();
        int res;
        int cnt = 0;
        for (int i = 0; i < size; i++) {
            if (cnt == 0) {
                res = nums[i];
                cnt++;
            } else if (res != nums[i]) {
                cnt--;
            } else {
                cnt++;
            }
        }
        return res;
    }
};

全部评论

相关推荐

2025-11-26 14:42
郑州轻工业大学 Java
在写周报的打工人很独...:这个笔试昨天晚上做了一下,真难啊,前后端,ai全有
点赞 评论 收藏
分享
哞客37422655...:兄弟别慌!💪 民办本找实习确实难点,但不是没机会。100+简历才2个面试,可能简历需要优化下: 项目经历写具体点,突出测试用例、bug数量等 技能栏把测试工具/方法论写清楚 可以考虑降低预期,先进小厂积累经验 测试岗相对好进,坚持投!现在才半个月,有人投3个月才上岸的😭 加油,offer在路上了🚀
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务