169

169.求众数

众数是在数组中数量大于n/2的数

输入: [3,2,3]
输出: 3
输入: [2,2,1,1,1,2,2]
输出: 2

摩尔投票法

找数组中数量大于一半的数,众数;
遍历该数组,随便指定一个数为临时众数,遍历数组,如果数组元素等于临时众数,count加1,若不等于,count减1,若count等于0,将当前current数组赋值给临时众数,最后返回临时众数。

  • 注意:上面若count等于0,则当前数赋值给众数 的逻辑应该在其他逻辑之前。

  • ps:这道题是用的摩尔投票法,之前做过一次,但是这次有些忘了,写的代码总出错,经过debug发现原因的。原来是我把判断count等于0时当前值给众数值的逻辑写到了最后一行,导致一开始就判断current是否等于n,因为不等于而得到-1了。也导致最终出错。

input1 = [3,3,4]
# input1 = [2,2,1,1,1,2,2]
def solution(nums):
    count = 0
    current = 0
    for n in nums:
        if count == 0:
            current = n
        if n == current:
            count += 1
        else: count -= 1
    return current
solution(input1)
3

你可能感兴趣的:(程序积累,leetcode,众数)