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

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

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

相关推荐

不愿透露姓名的神秘牛友
02-14 11:10
点赞 评论 收藏
分享
2024-12-26 20:46
复旦大学 C++
国棉17厂丶小王:拿了offer的那个周末晚上去网吧通宵,去网吧不知道玩什么刷了lc的每日一题,然后试着第一次打开了三角洲行动,从此少了一个已经刷了700道题的lc用户,但是烽火地带多了一只🐭🐭
点赞 评论 收藏
分享
评论
8
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务