Day6-Majority Element
问题描述:
Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋ times.
You may assume that the array is non-empty and the majority element always exist in the array.
从一个数组中找多数,所谓多数是指一个数组中出现次数超过数组长度的一半的元素。
Example:
Example 1:
Input: [3,2,3]
Output: 3
Example 2:
Input: [2,2,1,1,1,2,2]
Output: 2
解法一:
用空间换时间,老办法了,题目说了多数出现次数的要求,那我们就用一个字典记录每个数字的出现次数,然后再访问字典找到满足次数的那个元素就可以了。
class Solution:
def majorityElement(self, nums: List[int]) -> int:
result_dict = {}
n = len(nums)
n = n // 2
for i in nums:
if i not in result_dict:
result_dict[i] = 1
else:
result_dict[i] += 1
for i in result_dict:
if result_dict[i] > n:
return i
时间复杂度为O(N),空间复杂度为O(N)
解法二:
将数组排序,大多数一定在中间的位置。具体的数学原理我也解释不清楚,但是想一想也可以想到了,出现的次数要超过数组长度的一半,那肯定得有一个值在中间吧,要不然都在一边应该满足不了条件。
class Solution:
def majorityElement(self, nums: List[int]) -> int:
nums.sort()
return nums[len(nums) // 2]