时间:2020-05-21
题目地址:https://leetcode-cn.com/problems/majority-element/
题目难度:Easy
题目描述:
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例 1:
输入: [3,2,3]
输出: 3
示例 2:
输入: [2,2,1,1,1,2,2]
输出: 2
思路1:排序后求中位数
代码段1:5min运行通过,开心
class Solution:
def majorityElement(self, nums: List[int]) -> int:
nums.sort()
return nums[len(nums)//2]
总结:
- 每日一题,脑子逐渐补上了,继续努力
思路2:哈希表,用了好几次才知道这是哈希表= = 、
代码段2:通过
from collections import Counter
class Solution:
def majorityElement(self, nums: List[int]) -> int:
temp = Counter(nums)
return max(temp.keys(), key=temp.get)
总结:
- collections 官方文档解释High-performance container datatypes,高性能容量数据类型,包含五种数据类型 namedtuple() 【createe tuple subclasses with named fields】、deque【先进先出】、Counter【哈希】、OrderedDict【有序】、defaultdict【提供默认值的字典】
思路3:随机
代码段3:通过
import random
class Solution:
def majorityElement(self, nums: List[int]) -> int:
mid_number = len(nums) //2
while True:
temp = random.choice(nums)
if sum(1 for i in nums if i == temp) > mid_number:
return temp
总结:
- 三种的执行用时和内存消耗分别是 48 ms 15.1 MB | 44 ms 15.1 MB | 68 ms 15.2 MB
- 脑子是个好东西
后期优化:
分治、Boyer-Moore 投票算法