(Leetcode) 位1的个数 - Python实现

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

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

------------------------------------------------------------------------------

解法1:直接用字典统计词频,然后输出词频大于n/2的key。

class Solution(object):
    def majorityElement(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        n = len(nums)
        if n == 1:
            return nums[0]

        dic = {}
        for num in nums:
            if num in dic.keys():
                dic[num] += 1
                if dic[num] > n/2:
                    return num
            else:
                dic[num] = 1

解法2#:网友的想法真是一阵见血!题目给出的条件,"众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素",说明按大小排序后,该众数一定在 "中间位置"。

注意:sorted() 给出的结果是list,接受的参数只能是能整除整数,不能是小数float。

sorted() 函数对所有可迭代的对象进行排序操作。

sort 与 sorted 区别:

sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。

list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。

class Solution(object):
    def majorityElement(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        n = len(nums)
        if n == 1:
            return nums[0]

        return sorted(nums)[n//2]

解法3#:通过set()提出重复元素,然后通过count()遍历查到nums中词频大于n/2的。

class Solution(object):
    def majorityElement(self, nums):
        n = len(nums)
        if n == 1:
            return nums[0]

        res= set(nums)
        for num in res:
            if(nums.count(num)>(n/2)):
                return num

解法4#:巧用max(),lambda() 函数。需要注意,直接使用 max(dic.items())是对字典的key比较大小,需要通过 key=lambda x: x[1]来限定比较的是value,也就是词频。

class Solution(object):
    def majorityElement(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        n = len(nums)
        if n == 1:
            return nums[0]

        dic = {}
        for num in nums:
            if num in dic.keys():
                dic[num] += 1
            else:
                dic[num] = 1
        return max(dic.items(), key=lambda x: x[1])[0]

参考

https://www.runoob.com/python/python-func-sorted.html

https://blog.csdn.net/qq_34364995/article/details/80544139

https://blog.csdn.net/ma412410029/article/details/80528318

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值