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