File tree Expand file tree Collapse file tree 4 files changed +90
-1
lines changed Expand file tree Collapse file tree 4 files changed +90
-1
lines changed Original file line number Diff line number Diff 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 ) |
Original file line number Diff line number Diff 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'
Original file line number Diff line number Diff line change 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
Original file line number Diff line number Diff line change 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
You can’t perform that action at this time.
0 commit comments