Skip to content

Commit fa95b24

Browse files
committed
feat: update solutions to lc problem: No.0001
No.0001.Two Sum
1 parent d37b072 commit fa95b24

File tree

9 files changed

+167
-197
lines changed

9 files changed

+167
-197
lines changed

solution/0000-0099/0001.Two Sum/README.md

+63-73
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,9 @@
5757

5858
**方法一:哈希表**
5959

60-
用哈希表(字典)存放数组值以及对应的下标。
60+
我们可以用哈希表(字典) $d$ 存放数组值以及对应的下标。
6161

62-
遍历数组,当发现 `target - nums[i]` 在哈希表中,说明找到了目标值。
62+
遍历数组 `nums`,当发现 `target - nums[i]` 在哈希表中,说明找到了目标值,返回 `target - nums[i]` 的下标和 `i` 即可
6363

6464
时间复杂度 $O(n)$,空间复杂度 $O(n)$。其中 $n$ 是数组 `nums` 的长度。
6565

@@ -73,11 +73,11 @@
7373
class Solution:
7474
def twoSum(self, nums: List[int], target: int) -> List[int]:
7575
m = {}
76-
for i, v in enumerate(nums):
77-
x = target - v
78-
if x in m:
79-
return [m[x], i]
80-
m[v] = i
76+
for i, x in enumerate(nums):
77+
y = target - x
78+
if y in m:
79+
return [m[y], i]
80+
m[x] = i
8181
```
8282

8383
### **Java**
@@ -88,15 +88,14 @@ class Solution:
8888
class Solution {
8989
public int[] twoSum(int[] nums, int target) {
9090
Map<Integer, Integer> m = new HashMap<>();
91-
for (int i = 0; i < nums.length; ++i) {
92-
int v = nums[i];
93-
int x = target - v;
94-
if (m.containsKey(x)) {
95-
return new int[] {m.get(x), i};
91+
for (int i = 0; ; ++i) {
92+
int x = nums[i];
93+
int y = target - x;
94+
if (m.containsKey(y)) {
95+
return new int[] {m.get(y), i};
9696
}
97-
m.put(v, i);
97+
m.put(x, i);
9898
}
99-
return null;
10099
}
101100
}
102101
```
@@ -108,13 +107,14 @@ class Solution {
108107
public:
109108
vector<int> twoSum(vector<int>& nums, int target) {
110109
unordered_map<int, int> m;
111-
for (int i = 0; i < nums.size(); ++i) {
112-
int v = nums[i];
113-
int x = target - v;
114-
if (m.count(x)) return {m[x], i};
115-
m[v] = i;
110+
for (int i = 0; ; ++i) {
111+
int x = nums[i];
112+
int y = target - x;
113+
if (m.count(y)) {
114+
return {m[y], i};
115+
}
116+
m[x] = i;
116117
}
117-
return {};
118118
}
119119
};
120120
```
@@ -124,14 +124,14 @@ public:
124124
```go
125125
func twoSum(nums []int, target int) []int {
126126
m := map[int]int{}
127-
for i, v := range nums {
128-
x := target - v
129-
if j, ok := m[x]; ok {
127+
for i := 0; ; i++ {
128+
x := nums[i]
129+
y := target - x
130+
if j, ok := m[y]; ok {
130131
return []int{j, i}
131132
}
132-
m[v] = i
133+
m[x] = i
133134
}
134-
return nil
135135
}
136136
```
137137

@@ -145,15 +145,14 @@ func twoSum(nums []int, target int) []int {
145145
*/
146146
var twoSum = function (nums, target) {
147147
const m = new Map();
148-
for (let i = 0; i < nums.length; ++i) {
149-
const v = nums[i];
150-
const x = target - v;
151-
if (m.has(x)) {
152-
return [m.get(x), i];
148+
for (let i = 0; ; ++i) {
149+
const x = nums[i];
150+
const y = target - x;
151+
if (m.has(y)) {
152+
return [m.get(y), i];
153153
}
154-
m.set(v, i);
154+
m.set(x, i);
155155
}
156-
return [];
157156
};
158157
```
159158

@@ -163,22 +162,16 @@ var twoSum = function (nums, target) {
163162
public class Solution {
164163
public int[] TwoSum(int[] nums, int target) {
165164
var m = new Dictionary<int, int>();
166-
for (var i = 0; i < nums.Length; ++i)
167-
{
168-
int j;
169-
int v = nums[i];
170-
int x = target - v;
171-
if (m.TryGetValue(x, out j))
172-
{
165+
for (int i = 0, j; ; ++i) {
166+
int x = nums[i];
167+
int y = target - x;
168+
if (m.TryGetValue(y, out j)) {
173169
return new [] {j, i};
174170
}
175-
if (!m.ContainsKey(v))
176-
{
177-
m.Add(v, i);
171+
if (!m.ContainsKey(x)) {
172+
m.Add(x, i);
178173
}
179-
180174
}
181-
return null;
182175
}
183176
}
184177
```
@@ -188,42 +181,21 @@ public class Solution {
188181
```swift
189182
class Solution {
190183
func twoSum(_ nums: [Int], _ target: Int) -> [Int] {
191-
var map = [Int: Int]()
184+
var m = [Int: Int]()
192185
var i = 0
193-
for num in nums {
194-
map[num] = i
195-
i = i + 1
196-
}
197-
i = 0
198-
for num in nums {
199-
if let otherIndex = map[target - num], otherIndex != i {
200-
return [i, otherIndex]
186+
while true {
187+
let x = nums[i]
188+
let y = target - nums[i]
189+
if let j = m[target - nums[i]] {
190+
return [j, i]
201191
}
202-
i = i + 1
192+
m[nums[i]] = i
193+
i += 1
203194
}
204-
return []
205195
}
206196
}
207197
```
208198

209-
### **Nim**
210-
211-
```nim
212-
import std/enumerate
213-
214-
proc twoSum(nums: seq[int], target: int): seq[int] =
215-
var
216-
bal: int
217-
tdx: int
218-
for idx, val in enumerate(nums):
219-
bal = target - val
220-
if bal in nums:
221-
tdx = nums.find(bal)
222-
if idx != tdx:
223-
return @[idx, tdx]
224-
225-
```
226-
227199
### **Rust**
228200

229201
```rust
@@ -243,6 +215,24 @@ pub fn soluation(nums: Vec<i32>, target: i32) -> Vec<i32> {
243215
}
244216
```
245217

218+
### **Nim**
219+
220+
```nim
221+
import std/enumerate
222+
223+
proc twoSum(nums: seq[int], target: int): seq[int] =
224+
var
225+
bal: int
226+
tdx: int
227+
for idx, val in enumerate(nums):
228+
bal = target - val
229+
if bal in nums:
230+
tdx = nums.find(bal)
231+
if idx != tdx:
232+
return @[idx, tdx]
233+
234+
```
235+
246236
### **...**
247237

248238
```

0 commit comments

Comments
 (0)