给定一个大小为 n
的数组 nums
,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋
的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例 1:
输入:nums = [3,2,3] 输出:3
示例 2:
输入:nums = [2,2,1,1,1,2,2] 输出:2
提示:
n == nums.length
1 <= n <= 5 * 104
-109 <= nums[i] <= 109
思路1:排序,因为多数元素的个数大于等于它总个数的1/2,所以我们只要将其排序后找到中间的下标即为我们想要的值
代码:
class Solution(object):
def majorityElement(self, nums):
m=len(nums)
nums.sort()
return nums[m//2]
思路2:相当于是打擂操作,让列表中的第一个元素记为a,让后续元素与之进行比较,如果相同,让count+1(count记录)如果不同,相当于自动抵消一个,即count-1,如果count为零,说明当前的数已不是多数元素,a就变成列表的下一个元素。最终的a就是我们得到的多数元素。
举例:nums=[2,2,1,1,1,2,2]
a=nums[0]=2 进行循环
i=0 nums[0]=a count=1
i=1 nums[1]=a count=2
i=2 nums[2]=1!=a count=2-1=1
i=3 nums[3]=1!=a count=1-1=0 此时 a=nums[i+1]=nums[4]=1
i=4 nums[4]=a count=1
i=5 nums[5]=2!=a count=1-1=0 此时a=nums[i+1]=nums[6]=2
i=6 nums[6]=2=a count=1 return a 所以多数元素为 a=2
代码:
class Solution(object):
def majorityElement(self, nums):
m=len(nums)
count=0
a=nums[0]
for i in range(0,m,1):
if(nums[i]==a):
count=count+1
else:
count=count-1
if(count==0 and i+1<m):
a=nums[i+1]
return a
复杂度分析:
a.时间复杂度:O(n)
b.空间复杂度:O(1)