哈希表等:查找多数的元素

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

猜你喜欢

转载自blog.csdn.net/weixin_49321128/article/details/126661173
今日推荐