From 725b1a5b3f4289812bcedbdae4ded8e11832cd8f Mon Sep 17 00:00:00 2001 From: fartem Date: Mon, 28 Oct 2024 06:56:57 +0300 Subject: [PATCH] 2024-10-28 v. 6.9.0: added "347. Top K Frequent Elements" --- README.md | 1 + leetcode-ruby.gemspec | 2 +- lib/medium/347_top_k_frequent_elements.rb | 13 +++++++++ .../test_341_flatten_nested_list_iterator.rb | 2 -- .../test_347_top_k_frequent_elements.rb | 27 +++++++++++++++++++ 5 files changed, 42 insertions(+), 3 deletions(-) create mode 100644 lib/medium/347_top_k_frequent_elements.rb create mode 100644 test/medium/test_347_top_k_frequent_elements.rb diff --git a/README.md b/README.md index a9bcd674..21727c7b 100644 --- a/README.md +++ b/README.md @@ -555,3 +555,4 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/). | 331. Verify Preorder Serialization of a Binary Tree | [Link](https://leetcode.com/problems/verify-preorder-serialization-of-a-binary-tree/) | [Link](./lib/medium/331_verify_preorder_serialization_of_a_binary_tree.rb) | [Link](./test/medium/test_331_verify_preorder_serialization_of_a_binary_tree.rb) | | 334. Increasing Triplet Subsequence | [Link](https://leetcode.com/problems/increasing-triplet-subsequence/) | [Link](./lib/medium/334_increasing_triplet_subsequence.rb) | [Link](./test/medium/test_334_increasing_triplet_subsequence.rb) | | 341. Flatten Nested List Iterator | [Link](https://leetcode.com/problems/flatten-nested-list-iterator/) | [Link](./lib/medium/341_flatten_nested_list_iterator.rb) | [Link](./test/medium/test_341_flatten_nested_list_iterator.rb) | +| 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) | diff --git a/leetcode-ruby.gemspec b/leetcode-ruby.gemspec index 7e0bba67..06988a8a 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.8.9.1' + s.version = '6.9.0' s.license = 'MIT' s.files = ::Dir['lib/**/*.rb'] + %w[README.md] s.executable = 'leetcode-ruby' diff --git a/lib/medium/347_top_k_frequent_elements.rb b/lib/medium/347_top_k_frequent_elements.rb new file mode 100644 index 00000000..5e7de9e0 --- /dev/null +++ b/lib/medium/347_top_k_frequent_elements.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +# https://leetcode.com/problems/top-k-frequent-elements/description/ +# @param {Integer[]} nums +# @param {Integer} k +# @return {Integer[]} +def top_k_frequent(nums, k) + values = ::Hash.new(0) + nums.each { |num| values[num] += 1 } + queue = values.sort_by { |_, v| -v }.first(k) + + queue.map { |num, _| num } +end diff --git a/test/medium/test_341_flatten_nested_list_iterator.rb b/test/medium/test_341_flatten_nested_list_iterator.rb index 8882ee3b..574e8cc5 100644 --- a/test/medium/test_341_flatten_nested_list_iterator.rb +++ b/test/medium/test_341_flatten_nested_list_iterator.rb @@ -34,8 +34,6 @@ def test_default_one end def test_default_two - # [1,[4,[6]]] - nested_iterator = ::NestedIterator.new( [ ::NestedInteger.new(1), diff --git a/test/medium/test_347_top_k_frequent_elements.rb b/test/medium/test_347_top_k_frequent_elements.rb new file mode 100644 index 00000000..814c303e --- /dev/null +++ b/test/medium/test_347_top_k_frequent_elements.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +require_relative '../test_helper' +require_relative '../../lib/medium/347_top_k_frequent_elements' +require 'minitest/autorun' + +class TopKFrequentElementsTest < ::Minitest::Test + def test_default_one + assert_equal( + [1, 2], + top_k_frequent( + [1, 1, 1, 2, 2, 3], + 2 + ) + ) + end + + def test_default_two + assert_equal( + [1], + top_k_frequent( + [1], + 1 + ) + ) + end +end