leetcode169求众数python实现

169求众数 简单 分治算法

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

1.方法一遍历:首先想到的方法是将数组的所有元素遍历,计算每个元素出现的次数,最后返回出现次数最多的元素,即为众数。

class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        n = len(nums)
        #出现次数
        count = 0
        for i in range(n):
            for j in range(n):
                if(nums[i]==nums[j]):
                    count+=1
            if (count>n/2):
                return (nums[i])

一开始不停报错因为我把count+=1写成了count++,但是python中是没有自增自减的,原因参考(https://blog.csdn.net/guojunxiu/article/details/79936423)
python中的数字类型是不可变数据。意思说的是数字类型数据在【内存】中是不会发生改变,当变量值发生改变时,会新申请一块内存赋值为新值,然后将变量指向新的内存地址。

a = 10
id(a)
140698656902112

a = a+1
id(a)
140698656902144

可以看到当a的值发生改变时,a指向的内存地址也发生了改变。而在C语言中,a指向的内存地址并不会发生改变,而是改变内存的内容。

从这里就可以理解为什么”自增”为什么在python中不存在。++代表改变了对象本身,而python中数字类型是不可变,所以自增是不存在的。

答案写的要简洁许多

2.方法二排序法:观察题目可知,题目中对众数的出现次数进行了限定,大于(n/2),所以如果将数组排序无论升序降序,第n/2个位置的数一定是众数,n可能为奇数n/2要取整。
感觉这种方法很巧妙哎(参考题解)

class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        # 将列表直接排序
        nums.sort()  
        index=len(nums)//2
        return nums[index]

3.方法三哈希表统计数组中每个元素出现的个数,元素为键,元素个数为键值,最后返回键值最大的元素即可

class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        counts = collections.Counter(nums)
        return max(counts.keys(),key=counts.get)

collections.Counter这个函数真的是非常有用了,是用来统计个数的~返回的是一个dict,key是各个元素,value是对应的个数
对于这个函数的使用可以参考(https://blog.csdn.net/hejunqing14/article/details/52517367)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值