Skip to content

Commit 0d5f0da

Browse files
committed
2025-01-02 v. 7.6.4: added "23. Merge k Sorted Lists"
1 parent b03262b commit 0d5f0da

File tree

4 files changed

+90
-1
lines changed

4 files changed

+90
-1
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -633,3 +633,4 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/).
633633
| ------------------------------- | ------------------------------------------------------------------ | ---------------------------------------------------- | ---------------------------------------------------------- |
634634
| 4. Median of Two Sorted Arrays | [Link](https://leetcode.com/problems/median-of-two-sorted-arrays/) | [Link](./lib/hard/4_median_of_two_sorted_arrays.rb) | [Link](./test/hard/test_4_median_of_two_sorted_arrays.rb) |
635635
| 10. Regular Expression Matching | [Link](https://leetcode.com/problems/regular-expression-matching/) | [Link](./lib/hard/10_regular_expression_matching.rb) | [Link](./test/hard/test_10_regular_expression_matching.rb) |
636+
| 23. Merge k Sorted Lists | [Link](https://leetcode.com/problems/merge-k-sorted-lists/) | [Link](./lib/hard/23_merge_k_sorted_lists.rb) | [Link](./test/hard/test_23_merge_k_sorted_lists.rb) |

leetcode-ruby.gemspec

Lines changed: 1 addition & 1 deletion
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 = '7.6.3'
8+
s.version = '7.6.4'
99
s.license = 'MIT'
1010
s.files = ::Dir['lib/**/*.rb'] + %w[README.md]
1111
s.executable = 'leetcode-ruby'
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# frozen_string_literal: true
2+
3+
require_relative '../common/linked_list'
4+
5+
# https://leetcode.com/problems/merge-k-sorted-lists/
6+
# @param {ListNode[]} lists
7+
# @return {ListNode}
8+
def merge_k_lists(lists)
9+
return if lists.size.zero?
10+
11+
new_head = ::ListNode.new(0, lists[0])
12+
(1...lists.size).each do |i|
13+
a = new_head.next
14+
b = lists[i]
15+
prev = new_head
16+
17+
while a && b
18+
if a.val >= b.val
19+
prev.next = ::ListNode.new(b.val)
20+
prev.next.next = a
21+
b = b.next
22+
a = prev.next
23+
24+
next
25+
end
26+
27+
prev = a
28+
a = a.next
29+
end
30+
31+
prev.next = b if b
32+
end
33+
34+
new_head.next
35+
end
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# frozen_string_literal: true
2+
3+
require_relative '../test_helper'
4+
require_relative '../../lib/common/linked_list'
5+
require_relative '../../lib/hard/23_merge_k_sorted_lists'
6+
require 'minitest/autorun'
7+
8+
class MergeKSortedListsTest < ::Minitest::Test
9+
def test_default_one
10+
assert(
11+
::ListNode.are_equals(
12+
::ListNode.from_array(
13+
[1, 1, 2, 3, 4, 4, 5, 6]
14+
),
15+
merge_k_lists(
16+
[
17+
::ListNode.from_array(
18+
[1, 4, 5]
19+
),
20+
::ListNode.from_array(
21+
[1, 3, 4]
22+
),
23+
::ListNode.from_array(
24+
[2, 6]
25+
)
26+
]
27+
)
28+
)
29+
)
30+
end
31+
32+
def test_default_two
33+
assert(
34+
::ListNode.are_equals(
35+
::ListNode.from_array([]),
36+
merge_k_lists([])
37+
)
38+
)
39+
end
40+
41+
def test_default_three
42+
assert(
43+
::ListNode.are_equals(
44+
::ListNode.from_array([]),
45+
merge_k_lists(
46+
[
47+
::ListNode.from_array([])
48+
]
49+
)
50+
)
51+
)
52+
end
53+
end

0 commit comments

Comments
 (0)