# 001-两数之和
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/two-sum/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
# 一、题目描述
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
# 二、思路
维护一个 map
,将当前值和下标都存里面,然后用 count
去判断两个之和是不是目标值。
# 三、代码
# 3.1 C++
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int i, j;
vector<int> results;
map<int, int> hmap;
for (i = 0; i < nums.size(); i++) {
// 检查 hmap中是否有 num[i] 没有的话将 num[i]
if (!hmap.count(nums[i])) {
hmap.insert(pair<int, int>(nums[i], i));
}
// 如果 target - nums[i] 也在 hmap 中
if (hmap.count(target -nums[i]))
{
// 获得这个数的索引
int n = hmap[target - nums[i]];
if (n != i) {
results.push_back(n);
results.push_back(i);
return results;
}
}
}
return results;
}
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 3.2 Java
public class Solution {
public int[] twoSum(int[] nums, int target) {
// 边存边找
Map<Integer, Integer> map = new HashMap<>();
int[] res = new int[2];
for (int i = 0; i < nums.length; i++) {
// map 里面没有这个值
if (!map.containsKey(nums[i])) {
map.put(nums[i], i);
}
// 放进去后直接再判断
if (map.containsKey(nums[i])) {
// map 里面有这个 target - nums[i],说明找到了,但是还要判断不是当前值
if (map.containsKey(target - nums[i]) && map.get(target - nums[i]) != i) {
res[0] = i;
res[1] = map.get(target - nums[i]);
return res;
}
}
}
return res;
}
public static void main(String[] args) {
int[] nums = {2, 9, 11, 15};
int target = 11;
Solution a = new Solution();
a.twoSum(nums, target);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 3.3 JavaScript
/**
* 两数之和
*
* @param {number[]} nums 整数数组
* @param {number} target 目标值
* @return {number[]}
*/
var twoSum = function (nums, target) {
let map = new Map();
let res = new Array();
for (let i = 0; i < nums.length; i++) {
if (!map.has(nums[i])) {
map.set(nums[i], i);
}
if (map.has(target - nums[i]) && map.get(target - nums[i]) != i) {
res.push(i);
res.push(map.get(target - nums[i]));
return res;
}
}
return res;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23