目录
题目:
题解:
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)。
有趣的摩根投票法(还是挺有趣的)
摩根投票法(Morgan's Canon)是一种科学方法论原则,由19世纪英国心理学家康威·劳埃德·摩根(Conwy Lloyd Morgan)提出。该原则强调在解释动物行为时,应该首先考虑最简单的解释,而不是假设动物具有人类的智力和意识。
摩根投票法的提出是为了解决心理学研究中的一些争议。当时,一些心理学家认为动物具有人类的智力和意识,可以通过观察和解释它们的行为来了解它们的心理状态。但是,这种观点受到了另一些心理学家的质疑,他们认为这种解释过于主观,缺乏科学依据。
为了解决这个问题,摩根提出了摩根投票法。该法则要求在解释动物行为时,应该首先考虑最简单的解释,即不假设动物具有人类的智力和意识。只有在没有更简单的解释时,才能考虑更复杂的解释。这种方法可以避免主观偏见和过度解释,使研究更加客观和科学。
摩根投票法的提出对心理学和行为科学研究产生了深远的影响。它强调了科学研究的客观性和严谨性,促进了心理学和行为科学的发展。同时,它也引发了一些争议。一些人认为,摩根投票法过于简单化了动物行为的解释,忽略了动物的智力和意识。但是,摩根投票法仍然是一种重要的科学方法论原则,被广泛应用于心理学、生物学、计算机科学等领域的研究中。
总之,摩根投票法是一种科学方法论原则,强调在解释动物行为时应该首先考虑最简单的解释,避免主观偏见和过度解释,促进了心理学和行为科学的发展。