[leetcode]#167. Two Sum II

来源:互联网 发布:250luxu乐乎 编辑:程序博客网 时间:2024/06/01 09:26
  • 题目:Input: numbers={2, 7, 11, 15}, target=9
    Output: index1=1, index2=2
  • 思路方法

注意题目说了两个重要条件:1,有序数组;2,有唯一解。所以解的两个数一定都是数组中唯一存在的数。

  • 思路一

利用两个指针从数组的两侧开始向中间移动,寻找第一对和为target的两个数即为所求。

class Solution(object):    def twoSum(self, numbers, target):        """        :type numbers: List[int]        :type target: int        :rtype: List[int]        """        left, right = 0, len(numbers) - 1        while left < right:            if numbers[left] + numbers[right] == target:                return [left + 1, right + 1]            elif numbers[left] + numbers[right] > target:                right -= 1            else:                left += 1
  • 思路二

扫描数组,用字典记录扫描历史,并判断可能成对的另一个数是否在数组中。

代码

class Solution(object):    def twoSum(self, numbers, target):        """        :type numbers: List[int]        :type target: int        :rtype: List[int]        """        num_dict = {}        for i, num in enumerate(numbers):            if (target - num) in num_dict:                return [num_dict[target - num], i + 1]            num_dict[num] = i + 1
原创粉丝点击