为什么leetcode中的python解法过于pythonic,而忽略了算法题主要关注的复杂度问题?
关注者
631被浏览
299,668登录后你可以
不限量看优质回答私信答主深度交流精彩内容一键收藏
leetcode中有很多python one-liners,大致可分为如下几种。
1,简单明了型
这种类型的基本写过一定时间python的人都能想得出来,因为会用到一些python特有的性质,主要也是针对相对简单的问题,写出来不会给人一种装逼的感觉,比如下面几种。
- contains duplicate
def containsDuplicate(nums):
return len(nums) != len(set(nums))
- palindrome of a string
def findPalindrome(string):
return string[::-1]
2,简单装逼型
此类型需要熟练使用python一些库,写出来后有一定的pythonic逼格,但是解答的问题也通常较简单。
- single number
def singleNumber(nums):
return reduce(lambda x, y: x ^ y, nums)
- length of last word
def lengthOfLastWord(s):
return len(s.strip().split(" ")[-1])
3,粗暴装逼型
这种就像题注说的,牺牲了一定的时间空间复杂度,经常会把字符串cast成整数或者整数cast成字符串,但是硬是达到了pythonic的效果。
- plus one (input是一个数组,每个数表示一位数)
def plusOne(digits):
return [int(i) for i in str(int("".join(map(str, digits)))+1)]
- add binary
def addBinary(a, b):
bin(int(a, 2) + int(b, 2))[2:]
4,朴实炫技型
大家都看得懂,没有过多调用python的包包,逻辑也和在别的语言一样,但在python就是能一行完成。
- quicksort
def quicksort(nums):
return if len(nums) == 0 else quicksort([num for num in nums[1:] if num < nums[0]]) + [nums[0]] + quicksort([num for num in nums[1:] if num >= nums[0]])
5,大神炫技型
之前网上看到的,非leetcode,把python特性运用到了极致写出高校代码。
- getContourPoint, 比如[1,2,3,4,5,6] -> [(1,2,3),(4,5,6)]
def getContourPoint(nums):
return zip(*[iter(nums)]*3)
6,学神型
数据科学机器学习调包解体的,比如andrew ng解答cocktail party问题的python写法
W,s,v = np.linalg.svd(np.dot((np.tile(sum(x*x,0),(x.shape[0],1))*x),x.T))
面试中个人觉得2和4都是能接受的,如果面试官不了解python的话可以解释下syntax就好了。5和6就真的是大神了,复杂度神么的都是浮云。1和3这种捷径在面试中一般人不大能接受。