Skip to main content

两数之和

题目描述

给定一个整数数组 nums  和一个目标值 target,在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。 不能重复利用这个数组中同样的元素。

Given an array of integers, return indices of the two numbers such that they add up to a specific target.Not use the same element twice.

例如:

给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

解题方法

1.1 暴力解法(1)

  • 思路:用数组中前面的数值与其后面的数值进行求和,比较是否与目标值相等

  • 步骤:
    1)外循环:遍历数组中的元素
    2)内循环:遍历数组中比外循环元素下标大 1 的元素,比较两个元素的和与 target 值相等
    3)如果相等:则返回两个元素的下标
    4)如果不等:继续遍历

  • 性能分析:
    1)时间复杂度:有两层 for 循环,时间复杂度为 O(n^2)
    2)空间复杂度:不需要额外的空间,所以空间复杂度为 O(1)

//eg1
var twoSum = function (nums, target) {
for (let i = 0; i < nums.length - 1; i++) {
for (let j = i + 1; j < nums.length; j++) {
if (nums[i] + nums[j] === target) {
return [i, j];
}
}
}
};

1.2 暴力解法(2)

  • 思路:用数组中前面的数值与其后面的数值进行求和,比较是否与目标值相等

  • 步骤:
    1)外循环:用目标值减当前遍历的元素,得到两者的差值
    2)内循环:遍历数组中比外循环元素下标大 1 的元素,比较差值 sub 和该循环遍历的元素值是否相等 3)如果相等:则返回两个元素的下标
    4)如果不相等:继续遍历

  • 性能分析:
    1)时间复杂度:有两层 for 循环,时间复杂度为 O(n^2)
    2)空间复杂度:不需要额外的空间,所以空间复杂度为 O(1)

//eg2
var twoSum = function (nums, target) {
for (let i = 0; i < nums.length; i++) {
let sub = target - nums[i];
for (let j = i + 1; j < nums.length; j++) {
if (nums[j] == sub) {
return [i, j];
}
}
}
};

2.两遍哈希表

  • 思路:遍历数组将下标对应的元素存到散列表中,然后在散列表中查看目标值减去的值是否存在

  • 步骤:
    1)外循环:遍历数组元素,根据下标和元素值存放到散列表中
    2)内循环:遍历数组元素,在散列表中查找 sub 的值
    3)如果找到:则返回两个元素的下标
    4)如果没找到:继续遍历

  • 性能分析:
    1)时间复杂度:时间复杂度为 O(n)
    2)空间复杂度:需要额外的 n 大小的空间存储散列表,所以空间复杂度为 O(n)

var twoSum = function (nums, target) {
var map = new Map();
for (let i = 0; i < nums.length; i++) {
map.set(nums[i], i);
}
for (let j = 0; j < nums.length; j++) {
let sub = target - nums[j];
if (map.has(sub) && map.get(sub) !== j) {
return [j, map.get(sub)];
}
}
};
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function (nums, target) {
let arr = {};
for (let i = 0; i < nums.length; i++) {
if (arr[nums[i]] !== undefined) {
return [arr[nums[i]], i];
} else {
arr[target - nums[i]] = i;
}
}
};

英语学习

indices,是 index(索引、指数)的复数,也可以用 indexes 表示。
specific,英/美[spəˈsɪfɪk]
  adj.明确的; 具体的; 特定的; 特有的; 独特的;
  n.特效药; 特性; 细节; 显著的性质; 特性;