LeetCode Algorithms 1 两数之和

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

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例:

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

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

2. 题解

说明:

  1. 样例nums[0] + nums[1] = 2 + 7 = 9,你返回[0, 1]或者[1, 0]都是对的
  2. 题目保证有解

2.1. 思路

遍历数组,构建HashMap<数组元素,元素对应下标>

遍历nums[i]时,看一下target - nums[i]是否在HashMap中,如果有,就返回解

时间复杂度:O(n),因为要遍历整个数组

空间复杂度:O(n),因为用到HashMap

2.2. Java实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
大专栏  LeetCode Algorithms 1 两数之和>15
16
17
18
19
20
21
class  {
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<>();
int[] res = {-1, -1};
if (nums == null || nums.length < 2) {
return res;
}
for (int i = 0; i < nums.length; i++) {
int a = nums[i];
int b = target - nums[i];
if (map.containsKey(b)) {

int j = map.get(b);
res = new int[]{i, j};
break;
}
map.put(a, i);
}
return res;
}
}
原文地址:https://www.cnblogs.com/lijianming180/p/12037758.html