-
Notifications
You must be signed in to change notification settings - Fork 0
/
1. Two Sum
40 lines (28 loc) · 1.58 KB
/
1. Two Sum
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
31
32
33
34
35
36
37
38
39
40
Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target.
You may assume that each input would have exactly one solution, and you may not use the same element twice.
You can return the answer in any order.
Example 1:
Input: nums = [2,7,11,15], target = 9
Output: [0,1]
Explanation: Because nums[0] + nums[1] == 9, we return [0, 1].
Example 2:
Input: nums = [3,2,4], target = 6
Output: [1,2]
Example 3:
Input: nums = [3,3], target = 6
Output: [0,1]
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<>(); // 创建一个 HashMap 用于存储元素和它的索引
for (int i = 0; i < nums.length; i++) { // 遍历数组 nums
int complement = target - nums[i]; // 计算 target 和当前元素的补数
if (map.containsKey(complement)) { // 如果补数存在于 HashMap 中
return new int[] { map.get(complement), i }; // 返回补数的索引和当前元素的索引
}
map.put(nums[i], i); // 将当前元素和它的索引存储在 HashMap 中
}
throw new IllegalArgumentException("No two sum solution"); // 如果没有找到答案,抛出异常
}
}
它利用一个 HashMap 来存储数组 nums 中的每一个数字及其下标。然后,对于每一个数字,它都会计算一个补数,即 target
减去该数字,如果补数已经存在于 HashMap 中,那么我们就找到了答案,可以返回一个数组,其中包含补数的索引和该数字的索引。