题解 | #数组中出现次数超过一半的数字#

数组中出现次数超过一半的数字

http://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163

由于有一个数字在数组中出现的次数超过了一半。则我们每次都选出两个不同的数字,将其从数组中去掉,直到数组中只剩下一个数,或多个相同的数,就是要找的众数。
实际操作中,使用一个变量candi保存当前准备比较的数,用一个变量count保存这个准备比较的数还剩多少个才能完全从数组中去掉。每次比较时,若count为0,说明需要选出第一个数,准备与另一个不同的数一同从数组中去掉。当count不为0,若当前数与candi数相等,则count++,说明candi数又重复了一次,需要count++次才能从数组中完全去除。当当前数不等于candi时,count--,表明将该数与一个candi从数组中去除。最终candi保存的数就是需要寻找的众数。

空间复杂度O(1),时间复杂度O(n)。

class Solution {
public:
    int MoreThanHalfNum_Solution(vector<int> numbers) {
        int candi = 0;
        int count = 0;
        for(int i = 0;i < numbers.size();i++){
            if(count == 0){
                candi = numbers.at(i);
                count++;
            }
            else if(candi == numbers.at(i)){
                count++;
            }
            else{
                count--;
            }
        }
        return candi;
    }
};
全部评论

相关推荐

不愿透露姓名的神秘牛友
2024-12-30 18:02
程序员牛肉:1.可以标记一下自己的学校是985,有一些hr可能没想到你这个院校是985的。 2.简历所呈现出来的能力还是有点差的,苍穹外卖+黑马点评。这在java技术域里面也就是刚学三四个月的样子,大厂现在招人少,小厂又更加希望你能直接过来干活。就你简历上呈现出来的能力,确实是有点难找,肉眼可见的不懂技术。 第一个项目中:简单的使用redis也算是亮点嘛?使用jwt,threadlocal也算是亮点?你不就是调了几个包嘛?Nginx作为服务器也能写出来,这不是前端的活嘛? 第二个项目中:分布式锁+mq消息队列+Lua队列。真没啥好问的。属于面试官看一眼就阳痿的简历,没有任何想提问的欲望。 我给你建议是好好的挖一挖这个项目吧,其实苍穹外卖和黑马点评这两个项目很不错了,只不过是太烂大街了导致面试官没啥问的兴趣,所以不太推荐写简历上。
点赞 评论 收藏
分享
评论
4
1
分享

创作者周榜

更多
牛客网
牛客企业服务