每日一练python17

题目:(多数元素)给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。

示例 1:

输入:[3,2,3] 输出:3
示例 2:

输入:[2,2,1,1,1,2,2] 输出:2

程序说明:
1、方法一:用哈希映射(HashMap)来存储每个元素和其出现的次数。键表示一个元素,键值表示该元素出现的次数。运用循环遍历数组 nums 并将数组中的每个元素加入哈希映射中。在这之后,我们遍历哈希映射中的所有键值对,返回值最大的键(也就是出现次数最多的)。
代码中运用了collections.Counter方法将列表中的元素及其出现次数转换为字典键值对的形式,接着用max方法选出出现最多次数的元素
2、方法二是根据数学众数的知识解答的
3、方法三首先是随机选出列表中的一个数,然后通过for循环遍历列表中的数,将与所选出的数相等的数选出,记一次 1,再用sum将每次得到的 1 相加,最后将其与n/2比较,即可得出结果

全部代码:
方法一:哈希法

class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        counts = collections.Counter(nums)
        return max(counts.keys(), key=counts.get)

方法二:众数知识

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:
        majority_count = len(nums) // 2
        while True:
            candidate = random.choice(nums)
            if sum(1 for elem in nums if elem == candidate) > majority_count:
                return candidate

方法四:Boyer-Moore 投票算法

class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        count = 0
        candidate = None

        for num in nums:
            if count == 0:
                candidate = num
            count += (1 if num == candidate else -1)

        return candidate

题目来源:力扣(leetcode)

猜你喜欢

转载自blog.csdn.net/qq_52669357/article/details/121423995