leetcode icon indicating copy to clipboard operation
leetcode copied to clipboard

1. 两数之和

Open buuing opened this issue 3 years ago • 0 comments

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

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

示例:

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

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

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/two-sum 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。




  • 相向双指针
const twoSum = (nums, target) => {
  nums = nums.map((n, i) => [n, i])
  nums.sort((a, b) => a[0] - b[0])
  let left = 0, right = nums.length - 1
  while (left < right) {
    const sum = nums[left][0] + nums[right][0]
    if (sum === target) return [nums[left][1], nums[right][1]]
    if (sum > target) right--
    if (sum < target) left++
  }
}
  • 哈希表
const twoSum = (nums, target) => {
  let map = {}
  for (let i = 0; i < nums.length; i++) {
    let curr = nums[i]
    let val = target - curr
    if (map[val] !== undefined) {
      return [map[val], i]
    }
    map[curr] = i
  }
  return []
}

buuing avatar Dec 25 '20 09:12 buuing