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

  

   

posted @ 2016-03-27 19:49  colors  阅读(211)  评论(0编辑  收藏  举报