您的位置: 西安视窗 > 资讯 > 正文

一道LeetCode简单题,却打消了我对Python的自以为是!

2020-11-19 08:21:03来源:阅读:-

优质文章,第一时间送达!

一道LeetCode简单题,却打消了我对Python的自以为是

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学到位了吗?

推荐阅读:今视在线

滚动推荐
21:03一道LeetCode简单题,却打消
优质文章,第一时间送达!Leetcode最新上线了手机版app,之前手[详细]
16:16「vue干货1」循环,计算属性,事
Vue干货第一集:v-for循环v-for 指令需要以 site in[详细]
13:26小米小爱触屏音箱Pro8体验:过分
虽然市面上大屏智能音箱有不少,但像小爱触屏音箱Pro 8如此“巨”屏的[详细]
41:50在过去10年中,这10位亿万富翁的
其中,亚马逊创始人杰夫·贝佐斯位列第一,10年之间身价暴增974亿美元[详细]
36:35华为完美诠释双VOLTE,让双卡双
我们发现现在双卡双待双通的手机基本没有,而且厂家不再推出双通的手机,这[详细]
31:43电力设备:特斯拉牵手CATL 光伏
新能源汽车:特斯拉业绩超预期增长,CATL 成合作伙伴。特斯拉第四季度[详细]
07:51海鼎携手优米购,解锁跨境电商新模式
优米购于2016年在贵州贵安新区行政审批局注册成立,获政府扶持,极具创[详细]