From 5153895a6691c3ba599d5bac16e4dbf04cc2c54a Mon Sep 17 00:00:00 2001 From: fartem Date: Thu, 31 Oct 2024 08:39:42 +0300 Subject: [PATCH] 2024-10-31 v. 6.9.3: added "378. Kth Smallest Element in a Sorted Matrix" --- README.md | 1 + leetcode-ruby.gemspec | 2 +- ...kth_smallest_element_in_a_sorted_matrix.rb | 34 +++++++++++++++++++ ...kth_smallest_element_in_a_sorted_matrix.rb | 31 +++++++++++++++++ 4 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 lib/medium/378_kth_smallest_element_in_a_sorted_matrix.rb create mode 100644 test/medium/test_378_kth_smallest_element_in_a_sorted_matrix.rb diff --git a/README.md b/README.md index 0d2ac392..e1d3a7fe 100644 --- a/README.md +++ b/README.md @@ -558,3 +558,4 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/). | 347. Top K Frequent Elements | [Link](https://leetcode.com/problems/top-k-frequent-elements/) | [Link](./lib/medium/347_top_k_frequent_elements.rb) | [Link](./test/medium/test_347_top_k_frequent_elements.rb) | | 371. Sum of Two Integers | [Link](https://leetcode.com/problems/sum-of-two-integers/) | [Link](./lib/medium/371_sum_of_two_integers.rb) | [Link](./test/medium/test_371_sum_of_two_integers.rb) | | 377. Combination Sum IV | [Link](https://leetcode.com/problems/combination-sum-iv/) | [Link](./lib/medium/377_combination_sum_iv.rb) | [Link](./test/medium/test_377_combination_sum_iv.rb) | +| 378. Kth Smallest Element in a Sorted Matrix | [Link](https://leetcode.com/problems/kth-smallest-element-in-a-sorted-matrix/) | [Link](./lib/medium/378_kth_smallest_element_in_a_sorted_matrix.rb) | [Link](./test/medium/test_378_kth_smallest_element_in_a_sorted_matrix.rb) | diff --git a/leetcode-ruby.gemspec b/leetcode-ruby.gemspec index 802e889d..d6eb05ea 100644 --- a/leetcode-ruby.gemspec +++ b/leetcode-ruby.gemspec @@ -5,7 +5,7 @@ require 'English' ::Gem::Specification.new do |s| s.required_ruby_version = '>= 3.0' s.name = 'leetcode-ruby' - s.version = '6.9.2' + s.version = '6.9.3' s.license = 'MIT' s.files = ::Dir['lib/**/*.rb'] + %w[README.md] s.executable = 'leetcode-ruby' diff --git a/lib/medium/378_kth_smallest_element_in_a_sorted_matrix.rb b/lib/medium/378_kth_smallest_element_in_a_sorted_matrix.rb new file mode 100644 index 00000000..eb277d64 --- /dev/null +++ b/lib/medium/378_kth_smallest_element_in_a_sorted_matrix.rb @@ -0,0 +1,34 @@ +# frozen_string_literal: true + +# https://leetcode.com/problems/kth-smallest-element-in-a-sorted-matrix/ +# @param {Integer[][]} matrix +# @param {Integer} k +# @return {Integer} +def kth_smallest378(matrix, k) + n = matrix.length + l = matrix[0][0] + h = matrix[n - 1][n - 1] + m = 0 + temp = 0 + count = 0 + + while l < h + m = l + (h - l) / 2 + temp = n - 1 + count = 0 + + matrix.each do |mat| + temp -= 1 while temp >= 0 && mat[temp] > m + + count += (temp + 1) + end + + if count < k + l = m + 1 + else + h = m + end + end + + l +end diff --git a/test/medium/test_378_kth_smallest_element_in_a_sorted_matrix.rb b/test/medium/test_378_kth_smallest_element_in_a_sorted_matrix.rb new file mode 100644 index 00000000..0c3a6957 --- /dev/null +++ b/test/medium/test_378_kth_smallest_element_in_a_sorted_matrix.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +require_relative '../test_helper' +require_relative '../../lib/medium/378_kth_smallest_element_in_a_sorted_matrix' +require 'minitest/autorun' + +class KthSmallestElementInASortedMatrixTest < ::Minitest::Test + def test_default_one + assert_equal( + 13, + kth_smallest378( + [ + [1, 5, 9], + [10, 11, 13], + [12, 13, 15] + ], + 8 + ) + ) + end + + def test_default_two + assert_equal( + -5, + kth_smallest378( + [[-5]], + 1 + ) + ) + end +end