起因
一直以来,我是鄙夷刷题的,总觉得和高中的刷题有些类似,毕竟自己大学了,还要玩这种东西,觉得很没意思。
昨天深夜(3:00)和室友夜谈,聊到了刷题的意义,他是做纯开发,举例说刷过题的人写出 的代码会高效很多,附带了一些例子,听完觉得很有道理,于是立一个刷题的flag。
LeetCode 1
题目 : https://leetcode.com/problems/two-sum/description/
我的解答
class Solution(object):
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
i = 0
while(i < len(nums)):
the_other = target - nums[i]
j = i + 1
while(j < len(nums)):
if(the_other == nums[j]):
return i,j
j = j + 1
i = i + 1
return null
- 时间复杂度:O(n^2)
- 空间复杂度:O(1)
讨论区优秀回答
class Solution:
def twoSum(self, nums, target):
nums_hash = {}
for i in range(len(nums)):
if target - nums[i] in nums_hash:
return [nums_hash[target - nums[i]], i]
nums_hash[nums[i]] = i
优点在于利用dict的优势,取值为O(1)
- 时间复杂度:O(n)
- 空间复杂度:O(n) 由于引入了
nums_hash = {}
,所以空间复杂度上升