【LeetCode】python 主要元素 摩根投票法

目录

题目:

题解:

1.纯暴力(字典)

2. 摩根投票法


题目:

数组中占比超过一半的元素称之为主要元素。给你一个 整数 数组,找出其中的主要元素。若没有,返回 -1 。请设计时间复杂度为 O(N) 、空间复杂度为 O(1) 的解决方案。

示例 1:

输入:[1,2,5,9,5,9,5,5,5]
输出:5
示例 2:

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

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

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/find-majority-element-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解:

1.纯暴力(字典)

class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        if len(nums)==2:
            if nums[0] == nums[1]:
                return nums[0]
        if len(nums)==1:
            return nums[0]
        else:
            data = {}
            for i in range(len(nums)):
                if nums[i] not in data:
                    data[nums[i]] = 1
                else:
                    data[nums[i]] += 1
                if data[nums[i]] > len(nums)//2:
                    return nums[i]
        return -1

2. 摩根投票法

class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        candidate = None
        count = 0
        for num in nums:
            if count == 0:
                candidate = num
            count += 1 if num == candidate else -1
        if nums.count(candidate) > len(nums) // 2:
            return candidate
        else:
            return -1

```
class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        candidate = None  # 初始化候选人
        count = 0  # 初始化候选人票数
        for num in nums:  # 遍历数组中的每个元素
            if count == 0:  # 如果候选人票数为0,则将当前元素设为候选人
                candidate = num
            count += 1 if num == candidate else -1  # 如果当前元素等于候选人,则票数加1,否则减1
        if nums.count(candidate) > len(nums) // 2:  # 如果候选人的票数超过数组长度的一半,则返回候选人
            return candidate
        else:  # 否则返回-1
            return -1
```

这段代码使用了摩尔投票算法,通过遍历数组中的每个元素,找出出现次数超过数组长度一半的元素。具体实现步骤如下:

1. 初始化候选人和候选人票数为0。
2. 遍历数组中的每个元素:
   - 如果候选人票数为0,则将当前元素设为候选人。
   - 如果当前元素等于候选人,则票数加1,否则减1。
3. 如果候选人的票数超过数组长度的一半,则返回候选人,否则返回-1。

这个算法的时间复杂度为O(n),空间复杂度为O(1)。

【LeetCode】python 主要元素 摩根投票法_第1张图片

 

有趣的摩根投票法(还是挺有趣的)

摩根投票法(Morgan's Canon)是一种科学方法论原则,由19世纪英国心理学家康威·劳埃德·摩根(Conwy Lloyd Morgan)提出。该原则强调在解释动物行为时,应该首先考虑最简单的解释,而不是假设动物具有人类的智力和意识

摩根投票法的提出是为了解决心理学研究中的一些争议。当时,一些心理学家认为动物具有人类的智力和意识,可以通过观察和解释它们的行为来了解它们的心理状态。但是,这种观点受到了另一些心理学家的质疑,他们认为这种解释过于主观,缺乏科学依据。

为了解决这个问题,摩根提出了摩根投票法。该法则要求在解释动物行为时,应该首先考虑最简单的解释,即不假设动物具有人类的智力和意识。只有在没有更简单的解释时,才能考虑更复杂的解释。这种方法可以避免主观偏见和过度解释,使研究更加客观和科学。

摩根投票法的提出对心理学和行为科学研究产生了深远的影响。它强调了科学研究的客观性和严谨性,促进了心理学和行为科学的发展。同时,它也引发了一些争议。一些人认为,摩根投票法过于简单化了动物行为的解释,忽略了动物的智力和意识。但是,摩根投票法仍然是一种重要的科学方法论原则,被广泛应用于心理学、生物学、计算机科学等领域的研究中。

总之,摩根投票法是一种科学方法论原则,强调在解释动物行为时应该首先考虑最简单的解释,避免主观偏见和过度解释,促进了心理学和行为科学的发展。        

你可能感兴趣的:(蓝桥杯刷题,算法,leetcode,python)