0
点赞
收藏
分享

微信扫一扫

数组中出现次数超过一半的数字(摩尔投票法)

影子喵喵喵 2022-02-22 阅读 96

解题思路:

1.从该数组[1, 2, 3, 2, 2, 2, 5, 4, 2]的第一个数1开始, 假设1是题中要找出的数字x, 那么票数votes+1
2.数组第二个数字2不是x, 那么票数votes-1
3.该数组的前两项票数和为0
4.接下来假设数组的第三个数3是题中要找出的数字x, 那么票数votes-1
5.数组第四个数字2x, 那么票数votes+1
6.该数组的第三项和第四项票数和为0

依次类推
就可得出x

public class Solution {
    public int MoreThanHalfNum_Solution(int [] array) {
        int votes = 0, x = 0, count = 0;
        for(int num : array){
            if(votes == 0){
                x = num;
            }
            votes += num == x ? 1 : -1;
        }
        for(int num : array){
            if(num == x){
                count++;
            }
        }
        return count > array.length / 2 ? x : 0;
    }
}
举报

相关推荐

0 条评论