Leetcode 1. Two Sum(python)
Solution 1:
暴力求解法,时间复杂度为O(n^2),可能会超时。
Solution2:
先将数组排序(内置sort函数时间复杂度为O(nlgn)),然后用双指针。时间复杂度是O(nlgn)。
class Solution(object):
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
nums_index=list(enumerate(nums))
nums_sort=sorted(nums_index,key=lambda d:d[1])
l,r=0,len(nums)-1
while True:
if nums_sort[l][1]+nums_sort[r][1]<target:
l+=1
elif nums_sort[l][1]+nums_sort[r][1]>target:
r-=1
else:
return nums_sort[l][0],nums_sort[r][0]
Solution 3:
题目有提示用Hash Table,以时间换空间的做法。时间复杂度为O(n)
class Solution(object):
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
nums_dict={}
for (i,value) in enumerate(nums):
if nums_dict.has_key(target-value):
return [nums_dict[target-value],i]
else:
nums_dict[value]=i

浙公网安备 33010602011771号