LeetCode 169.求众数
题目描述
思路求解
1、第一种思路很简单,直接对数组中的元素进行排序。因为众数的个数超过了半数,所以我们取排好序的数组的中间的元素一定是众数
2、第二种思路是将数组中的元素进行一一抵消,懵逼没关系,听我继续讲。
首先我们选取数组中任意的两个元素,如果它们不等,则删去,相等则继续。
直到数组中所剩的元素全是相同的,那么所剩元素一定是众数
还是,因为众数的个数超过了半数,所以我们可以不断地抵消,最后一定会有众数剩余
怎么使用这种思路设计程序呢?说实话,想了挺久
程序设计思路:
- 初始化第一个元素为众数,然后依次遍历数组
- 如果后续元素与当前“众数”相同,则数量加一,否则减一
- 众数累计数量等于0时,换下一个数为众数
- 最后的“众数”便是真正的众数
代码求解
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%的提交,看了一个排在我前面的,用的我说了第一种方法。。。好吧,只能说这个测试数据量太少了
和我一起学算法,欢迎关注公众号 : 数学算法实验室