25
25
26
26
## 解法
27
27
28
+ 哈希表或双指针实现。时间复杂度均为 ` O(n) ` 。
29
+
30
+ 哈希表空间复杂度 ` O(n) ` ,双指针则是 ` O(1) ` 。
31
+
28
32
<!-- tabs:start -->
29
33
30
34
### ** Python3**
31
35
36
+ 哈希表:
37
+
38
+ ``` python
39
+ class Solution :
40
+ def twoSum (self , nums : List[int ], target : int ) -> List[int ]:
41
+ s = set ()
42
+ for num in nums:
43
+ if target - num in s:
44
+ return [num, target - num]
45
+ s.add(num)
46
+ ```
47
+
48
+ 双指针:
49
+
32
50
``` python
33
51
class Solution :
34
52
def twoSum (self , nums : List[int ], target : int ) -> List[int ]:
@@ -41,31 +59,89 @@ class Solution:
41
59
p += 1
42
60
else :
43
61
q -= 1
44
-
45
62
```
46
63
47
64
### ** Java**
48
65
66
+ 哈希表:
67
+
68
+ ``` java
69
+ class Solution {
70
+ public int [] twoSum (int [] nums , int target ) {
71
+ Set<Integer > s = new HashSet<> ();
72
+ for (int num : nums) {
73
+ if (s. contains(target - num)) {
74
+ return new int []{num, target - num};
75
+ }
76
+ s. add(num);
77
+ }
78
+ return null ;
79
+ }
80
+ }
81
+ ```
82
+
83
+ 双指针:
84
+
49
85
``` java
50
86
class Solution {
51
87
public int [] twoSum (int [] nums , int target ) {
52
- int p = 0 , q = nums. length - 1 ;
53
- while (p < q) {
88
+ for (int p = 0 , q = nums. length - 1 ; p < q;) {
54
89
int s = nums[p] + nums[q];
55
90
if (s == target) {
56
- return new int [] {nums[p], nums[q]};
91
+ return new int []{nums[p], nums[q]};
57
92
}
58
93
if (s < target) {
59
94
++ p;
60
95
} else {
61
96
-- q;
62
97
}
63
98
}
64
- return new int []{ 0 } ;
99
+ return null ;
65
100
}
66
101
}
67
102
```
68
103
104
+ ### ** C++**
105
+
106
+ ``` cpp
107
+ class Solution {
108
+ public:
109
+ vector<int > twoSum(vector<int >& nums, int target) {
110
+ for (int p = 0, q = nums.size() - 1; p < q;) {
111
+ int s = nums[ p] + nums[ q] ;
112
+ if (s == target) {
113
+ return vector<int >{nums[ p] , nums[ q] };
114
+ }
115
+ if (s < target) {
116
+ ++p;
117
+ } else {
118
+ --q;
119
+ }
120
+ }
121
+ return vector<int >{};
122
+ }
123
+ };
124
+ ```
125
+
126
+ ### **Go**
127
+
128
+ ```go
129
+ func twoSum(nums []int, target int) []int {
130
+ for p, q := 0, len(nums)-1; p < q; {
131
+ s := nums[p] + nums[q]
132
+ if s == target {
133
+ return []int{nums[p], nums[q]}
134
+ }
135
+ if s < target {
136
+ p++
137
+ } else {
138
+ q--
139
+ }
140
+ }
141
+ return nil
142
+ }
143
+ ```
144
+
69
145
### ** JavaScript**
70
146
71
147
``` js
@@ -74,19 +150,18 @@ class Solution {
74
150
* @param {number} target
75
151
* @return {number[]}
76
152
*/
77
- var twoSum = function (nums , target ) {
78
- let left = 0 ;
79
- let right = nums . length - 1 ;
80
- while (left < right ) {
81
- let sum = nums[left] + nums[right ];
82
- if (sum === target) {
83
- return [nums[left], nums[right]];
84
- } else if (sum > target) {
85
- right -- ;
86
- } else {
87
- left ++ ;
153
+ var twoSum = function (nums , target ) {
154
+ for ( let p = 0 , q = nums . length ; p < q;) {
155
+ const s = nums[p] + nums[q] ;
156
+ if (s == target ) {
157
+ return [ nums[p], nums[q] ];
158
+ }
159
+ if (s < target) {
160
+ ++ p;
161
+ } else {
162
+ -- q;
163
+ }
88
164
}
89
- }
90
165
};
91
166
```
92
167
0 commit comments