给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

代码:

排序+双指针

  1. class Solution:
  2. def twoSum(self, nums: List[int], target: int) -> List[int]:
  3. temp = nums.copy()
  4. temp.sort()
  5. i, j = 0, len(nums)-1
  6. while(i < j):
  7. if (temp[i] + temp[j]) > target:
  8. j = j - 1
  9. elif (temp[i] + temp[j]) < target:
  10. i = i + 1
  11. else:
  12. break
  13. index1 = nums.index(temp[i])
  14. nums.pop(index1)
  15. index2 = nums.index(temp[j])
  16. if index2 >= index1:
  17. index2 += 1
  18. return [index1, index2]

hash

  1. class Solution:
  2. def twoSum(self, nums: List[int], target: int) -> List[int]:
  3. hashset={}
  4. for i in range(len(nums)):
  5. findNum = target - nums[i]
  6. if hashset.get(findNum) is not None :
  7. return [hashset.get(findNum),i]
  8. hashset[nums[i]]=i