为什么leetcode中的python解法过于pythonic,而忽略了算法题主要关注的复杂度问题?

看了很多python提交的答案,每一个都令人拍案叫绝,真是pythonic的精髓体现的淋漓尽致! 但是! 算法题不是考察的是时间和空间复杂度吗?pyt…
关注者
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这种捷径在面试中一般人不大能接受。