1、题目描述:
给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例:
输入:nums = [3,2,3]
输出:3
方法一:采用字典建表:
class Solution:
def majorityElement(self, nums: List[int]) -> int:
map_a = dict()
for i in nums:
if i in map_a:
map_a[i]+=1
else:
map_a[i] =1
if map_a[i]>len(nums)/2:
return i
方法二:排序后取中间值:
class Solution:
def majorityElement(self, nums: List[int]) -> int:
nums.sort()
return nums[len(nums)//2]
方法三:采用内置的哈希函数表
class Solution:
def majorityElement(self, nums: List[int]) -> int:
counts = collections.Counter(nums)
return max(counts.keys(), key=counts.get)
题目2:多数元素2:
给定一个大小为 n 的整数数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。
示例:
输入:nums = [3,2,3]
输出:[3]
多数元素2
解法一:用字典:
class Solution:
def majorityElement(self, nums: List[int]) -> List[int]:
map_a = {
}
ans = []
for i in nums:
if i in map_a:
map_a[i]+=1
else:
map_a[i] =1
for i in map_a.keys():
if map_a[i]>len(nums)//3:
ans.append(i)
return ans
解法二:用内置的计数函数:
class Solution:
def majorityElement(self, nums: List[int]) -> List[int]:
dict1=Counter(nums)
list_final=[]
for i in dict1:
if dict1[i]>len(nums)/3:
list_final.append(i)
return list_final
题目3:元素计数
Given an integer array nums, return the number of elements that have both a strictly smaller and a strictly greater element appear in nums.
元素计数
例如:
Input: nums = [11,7,2,15]
Output: 2
采用英文是原题中文翻译有问题
解法:
class Solution:
def countElements(self, nums: List[int]) -> int:
smallest = min(nums)
largest = max(nums)
res = 0
for num in nums:
if smallest < num < largest:
res += 1
return res