Skip to content

Commit dc54cc8

Browse files
committed
Update all yesterday (Mar 26)'s solution changes.
1 parent c26f2c0 commit dc54cc8

37 files changed

+3240
-28
lines changed

en/1-1000/1-two-sum.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ Original link: [leetcoder.net - LeetCoder: Fucking Good LeetCode Solutions](http
22

33
# 1. Two Sum - LeetCoder: Fucking Good LeetCode Solutions
44

5-
LeetCode link: [1. Two Sum](https://leetcode.com/problems/two-sum), Difficulty: **Easy**.
5+
LeetCode link: [1. Two Sum](https://leetcode.com/problems/two-sum), difficulty: **Easy**.
66

77
## LeetCode description of "1. Two Sum"
88

en/1-1000/15-3sum.md

Lines changed: 303 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ Original link: [leetcoder.net - LeetCoder: Fucking Good LeetCode Solutions](http
22

33
# 15. 3Sum - LeetCoder: Fucking Good LeetCode Solutions
44

5-
LeetCode link: [15. 3Sum](https://leetcode.com/problems/3sum), Difficulty: **Medium**.
5+
LeetCode link: [15. 3Sum](https://leetcode.com/problems/3sum), difficulty: **Medium**.
66

77
## LeetCode description of "15. 3Sum"
88

@@ -140,6 +140,308 @@ class Solution:
140140
return list(results)
141141
```
142142

143+
## Ruby
144+
145+
```ruby
146+
# @param {Integer[]} nums
147+
# @return {Integer[][]}
148+
def three_sum(nums)
149+
nums.sort!
150+
results = Set.new
151+
152+
nums_2 = []
153+
nums.each_with_index do |num, i|
154+
next if i >= 3 && num == nums[i - 1] && num == nums[i - 2] && num == nums[i - 3]
155+
nums_2.append(num)
156+
end
157+
158+
nums = nums_2
159+
160+
# Iterate through each number as potential first element
161+
(0...nums.length - 2).each do |i|
162+
break if nums[i] > 0
163+
164+
left = i + 1
165+
right = nums.length - 1
166+
167+
# Two-pointer approach for remaining elements
168+
while left < right
169+
current_sum = nums[i] + nums[left] + nums[right]
170+
if current_sum == 0
171+
# Add sorted triplet to avoid duplicates
172+
results.add([nums[i], nums[left], nums[right]])
173+
left += 1
174+
right -= 1
175+
elsif current_sum < 0
176+
left += 1 # Need larger sum
177+
else
178+
right -= 1 # Need smaller sum
179+
end
180+
end
181+
end
182+
183+
results.to_a
184+
end
185+
```
186+
187+
## Go
188+
189+
```go
190+
func threeSum(nums []int) [][]int {
191+
sort.Ints(nums)
192+
193+
nums2 := make([]int, 0)
194+
for i, num := range nums {
195+
if i >= 3 && num == nums[i-1] && nums[i-1] == nums[i-2] && nums[i-2] == nums[i-3] {
196+
continue
197+
}
198+
nums2 = append(nums2, num)
199+
}
200+
201+
nums = nums2
202+
results := make([][]int, 0)
203+
seen := make(map[string]bool)
204+
205+
for i := 0; i < len(nums)-2; i++ {
206+
// if nums[i] > 0 {
207+
// break
208+
// }
209+
210+
left := i + 1
211+
right := len(nums) - 1
212+
213+
for left < right {
214+
sum := nums[left] + nums[right]
215+
if sum == -nums[i] {
216+
triplet := []int{nums[i], nums[left], nums[right]}
217+
key := fmt.Sprintf("%d,%d,%d", triplet[0], triplet[1], triplet[2])
218+
if !seen[key] {
219+
results = append(results, triplet)
220+
seen[key] = true
221+
}
222+
left++
223+
} else if sum > -nums[i] {
224+
right--
225+
} else {
226+
left++
227+
}
228+
}
229+
}
230+
231+
return results
232+
}
233+
```
234+
235+
## C++
236+
237+
```cpp
238+
class Solution {
239+
public:
240+
vector<vector<int>> threeSum(vector<int>& nums) {
241+
sort(nums.begin(), nums.end());
242+
243+
// Uncomment to speed up
244+
// vector<int> nums2;
245+
// for (int i = 0; i < nums.size(); i++) {
246+
// if (i >= 3 && nums[i] == nums[i-1] && nums[i-1] == nums[i-2] &&
247+
// nums[i-2] == nums[i-3]) {
248+
// continue;
249+
// }
250+
// nums2.push_back(nums[i]);
251+
// }
252+
// nums = nums2;
253+
254+
vector<vector<int>> results;
255+
set<vector<int>> seen;
256+
257+
for (int i = 0; i < nums.size() - 2; i++) {
258+
// Uncomment to speed up
259+
// if (nums[i] > 0) {
260+
// break;
261+
// }
262+
int left = i + 1;
263+
int right = nums.size() - 1;
264+
265+
while (left < right) {
266+
int sum = nums[left] + nums[right];
267+
268+
if (sum == -nums[i]) {
269+
vector<int> triplet = {nums[i], nums[left], nums[right]};
270+
271+
if (seen.find(triplet) == seen.end()) {
272+
results.push_back(triplet);
273+
seen.insert(triplet);
274+
}
275+
276+
left++;
277+
} else if (sum > -nums[i]) {
278+
right--;
279+
} else {
280+
left++;
281+
}
282+
}
283+
}
284+
285+
return results;
286+
}
287+
};
288+
```
289+
290+
## JavaScript
291+
292+
```javascript
293+
/**
294+
* @param {number[]} nums
295+
* @return {number[][]}
296+
*/
297+
var threeSum = function(nums) {
298+
nums.sort((a, b) => a - b);
299+
300+
// Uncomment to speed up
301+
// let nums2 = [];
302+
// for (let i = 0; i < nums.length; i++) {
303+
// if (i >= 3 && nums[i] === nums[i-1] && nums[i-1] === nums[i-2] && nums[i-2] === nums[i-3]) {
304+
// continue;
305+
// }
306+
// nums2.push(nums[i]);
307+
// }
308+
// nums = nums2;
309+
310+
const results = [];
311+
const seen = new Set();
312+
313+
for (let i = 0; i < nums.length - 2; i++) {
314+
// Uncomment to speed up
315+
// if (nums[i] > 0) {
316+
// break;
317+
// }
318+
let left = i + 1;
319+
let right = nums.length - 1;
320+
321+
while (left < right) {
322+
const sum = nums[left] + nums[right];
323+
324+
if (sum === -nums[i]) {
325+
const triplet = [nums[i], nums[left], nums[right]];
326+
const key = triplet.join(',');
327+
if (!seen.has(key)) {
328+
results.push(triplet);
329+
seen.add(key);
330+
}
331+
left++;
332+
} else if (sum > -nums[i]) {
333+
right--;
334+
} else {
335+
left++;
336+
}
337+
}
338+
}
339+
340+
return results;
341+
};
342+
```
343+
344+
## C#
345+
346+
```csharp
347+
public class Solution {
348+
public IList<IList<int>> ThreeSum(int[] nums) {
349+
Array.Sort(nums);
350+
351+
// Uncomment to speed up
352+
// var nums2 = new List<int>();
353+
// for (int i = 0; i < nums.Length; i++) {
354+
// if (i >= 3 && nums[i] == nums[i-1] && nums[i-1] == nums[i-2] && nums[i-2] == nums[i-3]) {
355+
// continue;
356+
// }
357+
// nums2.Add(nums[i]);
358+
// }
359+
// nums = nums2.ToArray();
360+
361+
var results = new List<IList<int>>();
362+
var seen = new HashSet<string>();
363+
364+
for (int i = 0; i < nums.Length - 2; i++) {
365+
// Uncomment to speed up
366+
// if (nums[i] > 0) {
367+
// break;
368+
// }
369+
int left = i + 1;
370+
int right = nums.Length - 1;
371+
372+
while (left < right) {
373+
int sum = nums[left] + nums[right];
374+
if (sum == -nums[i]) {
375+
var triplet = new List<int> { nums[i], nums[left], nums[right] };
376+
string key = string.Join(",", triplet);
377+
if (!seen.Contains(key)) {
378+
results.Add(triplet);
379+
seen.Add(key);
380+
}
381+
left++;
382+
} else if (sum > -nums[i]) {
383+
right--;
384+
} else {
385+
left++;
386+
}
387+
}
388+
}
389+
390+
return results;
391+
}
392+
}
393+
```
394+
395+
## Java
396+
397+
```java
398+
class Solution {
399+
public List<List<Integer>> threeSum(int[] nums) {
400+
Arrays.sort(nums);
401+
402+
// Uncomment to speed up
403+
// List<Integer> nums2 = new ArrayList<>();
404+
// for (int i = 0; i < nums.length; i++) {
405+
// if (i >= 3 && nums[i] == nums[i-1] && nums[i-1] == nums[i-2] && nums[i-2] == nums[i-3]) {
406+
// continue;
407+
// }
408+
// nums2.add(nums[i]);
409+
// }
410+
// nums = nums2.stream().mapToInt(i -> i).toArray();
411+
412+
List<List<Integer>> results = new ArrayList<>();
413+
var seen = new HashSet<>();
414+
415+
for (int i = 0; i < nums.length - 2; i++) {
416+
// Uncomment to speed up
417+
// if (nums[i] > 0) {
418+
// break;
419+
// }
420+
int left = i + 1;
421+
int right = nums.length - 1;
422+
423+
while (left < right) {
424+
int sum = nums[left] + nums[right];
425+
if (sum == -nums[i]) {
426+
List<Integer> triplet = Arrays.asList(nums[i], nums[left], nums[right]);
427+
if (!seen.contains(triplet)) {
428+
results.add(triplet);
429+
seen.add(triplet);
430+
}
431+
left++;
432+
} else if (sum > -nums[i]) {
433+
right--;
434+
} else {
435+
left++;
436+
}
437+
}
438+
}
439+
440+
return results;
441+
}
442+
}
443+
```
444+
143445
## Other languages
144446

145447
```java

0 commit comments

Comments
 (0)