给定一个数组和一个target数字,找到数组中加起来等于target的两个数,并返回他们的索引。 假定答案是唯一的,并且不允许两个数的索引是相同的。


In [22]:
def twoSum(nums, target):
    """
    :type nums: List[int]
    :type target: int
    :rtype: List[int]
    """
    i = 0
    nums_len = len(nums)
    j = nums_len - 1
    nums_sorted = sorted(nums)
    while i < j:
        sum = nums_sorted[i] + nums_sorted[j]
        if sum < target:
            i += 1
        elif sum > target:
            j -= 1
        else:
            ii =  nums.index(nums_sorted[i])
            if nums_sorted[i] == nums_sorted[j]:
                nums.pop(ii)
                j = nums.index(nums_sorted[j]) + 1
            else:
                j = nums.index(nums_sorted[j])
            return min(ii, j), max(ii, j)

将数组nums的index记录起来,然后一起排序,根据加和移动i,j指针,最后注意返回的参数是有顺序的


In [7]:
def twoSum(nums, target):
    a = list()
    nums_len = len(nums)
    for i in range(nums_len):
        a.append([nums[i], i])
    a = sorted(a, key=lambda a: a[0])
    i = 0
    j = nums_len - 1
    while i < j:
        sum = a[i][0] + a[j][0]
        if sum == target:
            return [a[i][1], a[j][1]] if a[i][1] <  a[j][1] else [a[j][1], a[i][1]]
        elif sum < target:
            i += 1
        else:
            j -= 1

In [8]:
nums = [3, 3]
print(twoSum(nums, 6))


[0, 1]

In [15]:
class Solution(object):
    def twoSum(self, nums, target):
        """
        将已经看到的内容放进篮子里面,并记录其index,
        每次查找篮子里面没有对应的值。
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        lookup = {}
        for i, num in enumerate(nums):
            if target - num in lookup:
                return [lookup[target - num], i]
            lookup[num] = i
            print(lookup)
        return []

    def twoSum2(self, nums, target):
        """
        每次都查找当前查找值的后面的值,前一个方法是向后查找,
        这个方法是向前查找。
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        k = 0
        for i in nums:
            j = target - i
            k += 1
            tmp_nums = nums[k:]
            print(tmp_nums)
            if j in tmp_nums:
                return [k - 1, tmp_nums.index(j) + k]

In [16]:
Solution().twoSum2((3, 2, 7, 3), 6)


(2, 7, 3)
Out[16]:
[0, 3]

这两个方法hen