LeetCode 169.求众数

LeetCode 169.求众数

题目描述

思路求解

1、第一种思路很简单,直接对数组中的元素进行排序。因为众数的个数超过了半数,所以我们取排好序的数组的中间的元素一定是众数

2、第二种思路是将数组中的元素进行一一抵消,懵逼没关系,听我继续讲。
首先我们选取数组中任意的两个元素,如果它们不等,则删去,相等则继续。
直到数组中所剩的元素全是相同的,那么所剩元素一定是众数

还是,因为众数的个数超过了半数,所以我们可以不断地抵消,最后一定会有众数剩余

怎么使用这种思路设计程序呢?说实话,想了挺久

程序设计思路:

  1. 初始化第一个元素为众数,然后依次遍历数组
  2. 如果后续元素与当前“众数”相同,则数量加一,否则减一
  3. 众数累计数量等于0时,换下一个数为众数
  4. 最后的“众数”便是真正的众数

代码求解

class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        curIdx, count = None, 0
        for item in nums:
            if count == 0:
                curIdx = item
            count += 1 if item == curIdx else -1
        
        return curIdx

提交结果

不知道什么只超过了84.40%的提交,看了一个排在我前面的,用的我说了第一种方法。。。好吧,只能说这个测试数据量太少了

和我一起学算法,欢迎关注公众号 : 数学算法实验室

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值