剑指offer(28)数组中出现次数超过一半的数字

public class Solution {
    public int MoreThanHalfNum_Solution(int [] array) {
        int candidate = 0;//候选
        int count = 0;//次数
        for(int i = 0;i != array.length;i++){//核心代码:一次在数组中删掉两个不同的数字,不停的删除直到剩下的数只有一种,如果一个数字出现的次数大于一半,则这个数字一定会被剩下来,也就是最后的candidate值
            if(count == 0){
                candidate = array[i];
                count = 1;
            }else if(array[i] == candidate){
                count++;
            }else{
                count--;
            }
        }
        
        count = 0;
        for(int i = 0;i != array.length;i++){//如果是1,2,3,3会被剩下,这个for则检验剩下的数字出现的次数是否过半
            if(array[i] == candidate){
                count++;
            }
        }
        if(count > array.length / 2){
           return candidate;
        }else{
           return 0;
        }
     
    }
}

全部评论

相关推荐

10-07 20:48
门头沟学院 Java
不敢追175女神:可能是实习上着班想到后面还要回学校给导师做牛马,看着身边都是21-25的年纪,突然emo了了
点赞 评论 收藏
分享
冲芭芭拉鸭:你这图还挺新,偷了。
投递美团等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务