找数组中数量超过总数一半的元素

思路:抵消法,记录当前元素ret,初始数量为num=0;从前到后遍历,发现遍历到的元素和ret相同,num++, 否则num--, 如果num==0,则ret变成当前元素。

public class MostNum {

    public static void main(String[] args) {
        int[] array = new int[]{1, 2, 3, 4, 2, 2, 2, 2, 5, 6, 2, 2};
        int res = mostNum(array);
        System.out.println(res);
    }

    public static int mostNum(int[] array) {
        int num = 0;
        int ret = Integer.MIN_VALUE;
        for (int i = 0; i < array.length; i++) {
            if (ret == array[i]) {
                num++;
            } else {
                if (num == 0) {
                    ret = array[i];
                } else {
                    num--;
                }
            }
        }
        return ret;
    }
}

你可能感兴趣的:(找数组中数量超过总数一半的元素)