Skip to content

Commit 3796a3e

Browse files
committed
2024-07-02 v. 6.0.1: added "15. 3Sum"
1 parent d09a8d1 commit 3796a3e

File tree

4 files changed

+54
-1
lines changed

4 files changed

+54
-1
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -466,3 +466,4 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/).
466466
| 8. String to Integer (atoi) | [Link](https://leetcode.com/problems/string-to-integer-atoi/) | [Link](./lib/medium/8_string_to_integer_atoi.rb) |
467467
| 11. Container With Most Water | [Link](https://leetcode.com/problems/container-with-most-water/) | [Link](./lib/medium/11_container_with_most_water.rb) |
468468
| 12. Integer to Roman | [Link](https://leetcode.com/problems/integer-to-roman/) | [Link](./lib/medium/12_integer_to_roman.rb) |
469+
| 15. 3Sum | [Link](https://leetcode.com/problems/3sum/) | [Link](./lib/medium/15_3sum.rb) |

leetcode-ruby.gemspec

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ require 'English'
55
::Gem::Specification.new do |s|
66
s.required_ruby_version = '>= 3.0'
77
s.name = 'leetcode-ruby'
8-
s.version = '6.0.0'
8+
s.version = '6.0.1'
99
s.license = 'MIT'
1010
s.files = ::Dir['lib/**/*.rb'] + %w[bin/leetcode-ruby README.md LICENSE]
1111
s.executable = 'leetcode-ruby'

lib/medium/15_3sum.rb

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# frozen_string_literal: true
2+
3+
# https://leetcode.com/problems/3sum/
4+
# @param {Integer[]} nums
5+
# @return {Integer[][]}
6+
def three_sum(nums)
7+
nums.sort!
8+
result = []
9+
(0...nums.length - 2).each do |i|
10+
curr = nums[i]
11+
12+
next if i.positive? && curr == nums[i - 1]
13+
14+
rem = -curr
15+
start = i + 1
16+
en = nums.length - 1
17+
18+
while start < en
19+
s = nums[start]
20+
e = nums[en]
21+
22+
if s + e == rem
23+
result << [curr, s, e]
24+
25+
start += 1 while start < en && nums[start] == nums[start + 1]
26+
en -= 1 while start < en && nums[en] == nums[en - 1]
27+
28+
start += 1
29+
en -= 1
30+
elsif s + e > rem
31+
en -= 1
32+
else
33+
start += 1
34+
end
35+
end
36+
end
37+
38+
result
39+
end

test/medium/test_15_3sum.rb

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# frozen_string_literal: true
2+
3+
require_relative '../test_helper'
4+
require_relative '../../lib/medium/15_3sum'
5+
require 'minitest/autorun'
6+
7+
class ThreeSumTest < ::Minitest::Test
8+
def test_default
9+
assert_equal([[-1, -1, 2], [-1, 0, 1]], three_sum([-1, 0, 1, 2, -1, -4]))
10+
assert_equal([], three_sum([0, 1, 1]))
11+
assert_equal([[0, 0, 0]], three_sum([0, 0, 0]))
12+
end
13+
end

0 commit comments

Comments
 (0)