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

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

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。

你可以假设数组是非空的,并且给定的数组总是存在多数元素。

 

本题常见的三种解法:

哈希表统计法: 遍历数组 nums ,用 HashMap 统计各数字的数量,即可找出 众数 。此方法时间和空间复杂度均为 O(N)O(N) 。
数组排序法: 将数组 nums 排序,数组中点的元素 一定为众数。
摩尔投票法: 核心理念为 票数正负抵消 。此方法时间和空间复杂度分别为 O(N) 和 O(1) ,为本题的最佳解法。

 

func MoreThanHalfNum_Solution( numbers []int ) int {
    // write code here
    cnt:=0
    target := 0

    for _, v := range numbers {
        if cnt == 0 {
            target = v
        }

        if v == target {
            cnt++
        } else {
            cnt--
        }
    }

    return target
}

  

posted @ 2021-04-10 00:04  zqlucky  阅读(54)  评论(0编辑  收藏  举报