169. Majority Element

博客围绕给定大小为n的非空数组,介绍了寻找其中多数元素(出现次数超⌊ n/2 ⌋ 次)的方法。包括暴力求解,用字典记录元素及个数;先排序,取中间元素;分治法,将数组拆分找出现次数最多元素,再比较确定最终结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋ times.
You may assume that the array is non-empty and the majority element always exist in the array.

Example 1:
Input: [3,2,3]
Output: 3

Example 2:
Input: [2,2,1,1,1,2,2]
Output: 2

给定一个大小为n的数组,找到其中的“多数元素”。多数元素指的是出现次数超过 ⌊ n/2 ⌋ 次的元素。
假定数组非空,且给定的数组中一定存在多数元素。
思路:
1、暴力求解,用一个字典记录所有出现过的元素及其个数。由于题目中说多数元素一定存在,当找到某个元素出现次数大于n/2时即可停止。

class Solution(object):
    def majorityElement(self, nums):        
        dicts = {}
        for i in nums:
            dicts [i] = dicts .get(i, 0) + 1// 字典(Dictionary) get() 函数返回指定键的值,如果值不在字典中返回默认值。
            if dicts [i] > len(nums)/2:
                return i

2、先对数组进行排序,因为多数元素一定存在,且个数超过总个数的一半,那么排序后最中间的那个元素一定是多数元素。

class Solution(object):
    def majorityElement(self, nums):
        nums.sort()
        return nums[len(nums)/2]

3、分治法:
每次将数组分成左右两半,在两半中分别找出现次数最多的元素,若找到的两个元素相同则此元素即为所求,否则在整个数组中分别计算这两个元素出现的次数,取较大的那个。

class Solution(object):
    def majorityElement(self, nums):
        return self.major(nums,0,len(nums)-1)
    
    def major(self,ori_nums,left,right):
        if left==right:
            return ori_nums[left]
        mid = (left+right)/2
        major_l=self.major(ori_nums,left,mid)
        major_r=self.major(ori_nums,mid+1,right)
        if major_l==major_r:
            return major_l
        if ori_nums[left: right+1].count(major_l) > ori_nums[left: right+1].count(major_r):
            return major_l
        else:
            return major_r
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值