-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathQ1_两数之和.java
64 lines (57 loc) · 2.49 KB
/
Q1_两数之和.java
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package com.algorithm.demo.array;
import com.algorithm.demo.PrintArray;
import java.util.HashMap;
/**
* 56. 两数之和
* 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。
* <p>
* 你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标。注意这里下标的范围是 0 到 n-1。
* <p>
* 样例
* 样例1:
* 给出 numbers = [2, 7, 11, 15], target = 9, 返回 [0, 1].
* 样例2:
* 给出 numbers = [15, 2, 7, 11], target = 9, 返回 [1, 2].
* 挑战
* 给自己加点挑战
* <p>
* O(n)O(n) 空间复杂度,O(nlogn)O(nlogn) 时间复杂度,
* O(n)O(n) 空间复杂度,O(n)O(n) 时间复杂度,
* 注意事项
* 你可以假设只有一组答案。
* ⣿⣿⣿⣿⣿⠟⠋⠄⠄⠄⠄⠄⠄⠄⢁⠈⢻⢿⣿⣿⣿⣿⣿⣿⣿
* ⣿⣿⣿⣿⣿⠃⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠈⡀⠭⢿⣿⣿⣿⣿
* ⣿⣿⣿⣿⡟⠄⢀⣾⣿⣿⣿⣷⣶⣿⣷⣶⣶⡆⠄⠄⠄⣿⣿⣿⣿
* ⣿⣿⣿⣿⡇⢀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⠄⠄⢸⣿⣿⣿⣿
* ⣿⣿⣿⣿⣇⣼⣿⣿⠿⠶⠙⣿⡟⠡⣴⣿⣽⣿⣧⠄⢸⣿⣿⣿⣿
* ⣿⣿⣿⣿⣿⣾⣿⣿⣟⣭⣾⣿⣷⣶⣶⣴⣶⣿⣿⢄⣿⣿⣿⣿⣿
* ⣿⣿⣿⣿⣿⣿⣿⣿⡟⣩⣿⣿⣿⡏⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
* ⣿⣿⣿⣿⣿⣿⣹⡋⠘⠷⣦⣀⣠⡶⠁⠈⠁⠄⣿⣿⣿⣿⣿⣿⣿
* ⣿⣿⣿⣿⣿⣿⣍⠃⣴⣶⡔⠒⠄⣠⢀⠄⠄⠄⡨⣿⣿⣿⣿⣿⣿
* ⣿⣿⣿⣿⣿⣿⣿⣦⡘⠿⣷⣿⠿⠟⠃⠄⠄⣠⡇⠈⠻⣿⣿⣿⣿
* ⣿⣿⣿⣿⡿⠟⠋⢁⣷⣠⠄⠄⠄⠄⣀⣠⣾⡟⠄⠄⠄⠄⠉⠙⠻
* ⡿⠟⠋⠁⠄⠄⠄⢸⣿⣿⡯⢓⣴⣾⣿⣿⡟⠄⠄⠄⠄⠄⠄⠄⠄
* ⠄⠄⠄⠄⠄⠄⠄⣿⡟⣷⠄⠹⣿⣿⣿⡿⠁⠄⠄⠄⠄⠄⠄⠄⠄
*/
public class Q1_两数之和 {
public static void main(String[] args) {
int[] data = {2, 7, 11, 15};
// int[] data = {15, 2, 7, 11};
int[] result = sum(data, 9);
PrintArray.print(result);
}
public static int[] sum(int[] numbers, int target) {
if (numbers == null || numbers.length == 0) {
return null;
}
HashMap<Integer, Integer> hashMap = new HashMap<>();
for (int i = 0; i < numbers.length; i++) {
if (hashMap.containsKey(target - numbers[i])) {
return new int[]{hashMap.get(target - numbers[i]), i};
} else {
hashMap.put(numbers[i], i);
}
}
return new int[0];
}
}