优质文章,第一时间送达!
Leetcode最新上线了手机版app,之前手机只能通过浏览器登录网站学习,如今有app,闲了就可以瞅两道题。今天等车的时候随手翻了一道题
169. 多数元素 http://leetcode-cn.com/problems/majority-element/。
看了下是众数问题,脑子简单过了下大概思路,就准备接着看其他题了。但想想还是看下别人是怎么做的吧,结果….
关于题目
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例 1:
输入: [3,2,3]
输出: 3
示例 2:
输入: [2,2,1,1,1,2,2]
输出: 2
暴力解法
先来看看最简单无脑的暴力解法,详细大多数人都能想到该解题方式:
1class Solution:
2 def majorityElement(self, nums):
3 majority_count = len(nums)//2
4 for num in nums:
5 count = sum(1 for elem in nums if elem == num)
6 if count > majority_count:
7 return num
先计算列表1/2的长度,然后进行for循环嵌套最终获取结果。这种时间复杂度:O(n*n)的解法就不多赘述了。主要看看下面两种解法。
哈希表
这种方法,在LeetCode上很常见,就是使用Counter的方式,生成针对元素与出现次数的字典,然后进行计算。
1class Solution:
2 def majorityElement(self, nums):
3 counts = collections.Counter(nums)
4 return max(counts.keys, key=counts.get)
本来觉得没什么特别,但当看到return操作时,觉得自己几年的Python都白学了。居然不知道max函数,具有key的方法…一直是用它来简单的比较最大值。殊不知针对字典操作时,max可以通过定义key值来进行动态比较。(类似的方法如sorted倒是经常使用)…
不知道max有key这个参数的,举个手,让我知道我不是一个人,哈哈…
奇思妙想
最让我佩服的就是下面这种解题思路,堪称经典。
文中定义有一个关键点,多数元素是指数据中出现大于n/2的元素。那么如果所有数字被单调递增或者单调递减的顺序排了序,当n是奇数时,众数的下标为n/2,当n是偶数时,下标为n/2 +1。于是出现了下面这种犀利的解法。
1class Solution:
2 def majorityElement(self, nums):
3 nums.sort
4 return nums[len(nums)//2]
然而,官方的答案还远不止这些,一共提供了六种解答方式。所以,你觉得自己Python学到位了吗?
推荐阅读:旗龙网
-
没有痣的他们是不是别有一番风味
很多明星的脸上都有痣,有的明星为了不影响自己的颜值,都把它点掉了,像李易峰、李倩。还有的明星则保留了那些痣,让自己有辨识度,但会不会点掉更好呢,一起来看看迪丽热...
2019-12-31 -
《奔腾年代》剧中这十句台词说得特在理,您觉得
《奔腾年代》已经完美收官,不知有没有和我一样的小伙伴依旧是恋恋不舍。在感受奔腾机车梦和白首终老爱情的同时,我也被剧中频出的金句台词所感染?下面这十句台词,我觉得...
2019-12-31 -
明着圈钱的5大烂片,坑粉丝、卖人设,他们做到
1、《奔跑吧!兄弟》电影版。票房:4.35亿。好好的综艺,为什么拍电影,前两季综艺还算可以,后面一季比一季差,到现在连关注都懒得关注,太没有意义,简直就是浪费大...
2019-12-31 -
他是《父母爱情》校长儿子,出演“学霸腹黑男”
说起娱乐圈子承父业的不在少数,有葛存壮、葛优父子,陈强、陈佩斯父子。年轻一代中有陈宝国、陈月父子,郭德纲、郭麒麟还有就是今天要说的杨立新、杨玏父子。杨立新都知道...
2019-12-30 -
李兰迪清宫造型被吐槽后,中戏考试照片曝光,终
李兰迪最近的热度是真的很高,有很多的人都是在一直关注着她,之前在综艺节目《亲爱的客栈3》中的时候,她也是因为性格问题一直被大家讨论,之前因为饰演余周周留下的印象...
2019-12-30 -
同是老戏骨“年轻照”,苏大强忍了,苏母也忍了
现在纵观整个娱乐圈,可以说是90后,00后的天下。每播一部剧,剧中的小鲜肉和小花都特别多,而且颜值确实很高。但是有时也会需要很多老戏骨出演,往往他们的一些角色深...
2019-12-27