求是否存在超过数组一半的数字。用摩尔投票法

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

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

public class Solution {
    public int MoreThanHalfNum_Solution(int [] array) {
        if(array==null||array.length==0)return 0;
        int morgen=0;
        int vote=0;
        for(int i=0;i<array.length;i++){
            if(vote==0){
                morgen=array[i];
                vote++;
            }else{
                if(array[i]==morgen){
                    vote++;
                }else{
                    vote--;
                }
            }
        }
        int tmp=0;
        for(int i=0;i<array.length;i++){
            if(array[i]==morgen){
                tmp++;
            }
            if(tmp>array.length/2){
                return morgen;
            }
        }
        return 0;
    }
}
用摩尔投票法 可使时间复杂度为On 空间复杂度为O1.
全部评论
这种方法仅适用于有相邻的元素的数组吧,一但没有相邻,“[1,2,3,2,7,2,8,2,5,4,2]”,他就判断不到返回0了
点赞 回复 分享
发布于 2021-04-17 20:22
不会,题目说了一半,如果相邻的话,最后一个数字就是出现值。
点赞 回复 分享
发布于 2021-06-01 16:38

相关推荐

只写bug的程序媛:人家说一本以上,不是及以上
点赞 评论 收藏
分享
评论
8
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务