From 4ef99adc35389df5e9bea41e25bde7dce438b26a Mon Sep 17 00:00:00 2001 From: fartem Date: Tue, 14 Jan 2025 11:02:58 +0300 Subject: [PATCH] 2025-01-14 v. 8.0.2: added "968. Binary Tree Cameras" --- README.md | 1 + leetcode-ruby.gemspec | 2 +- lib/common/binary_tree.rb | 3 -- lib/hard/968_binary_tree_cameras.rb | 33 +++++++++++++++ test/hard/test_968_binary_tree_cameras.rb | 50 +++++++++++++++++++++++ 5 files changed, 85 insertions(+), 4 deletions(-) create mode 100644 lib/hard/968_binary_tree_cameras.rb create mode 100644 test/hard/test_968_binary_tree_cameras.rb diff --git a/README.md b/README.md index becabec5..2892329f 100644 --- a/README.md +++ b/README.md @@ -671,3 +671,4 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/). | 871. Minimum Number of Refueling Stops | [Link](https://leetcode.com/problems/minimum-number-of-refueling-stops/) | [Link](./lib/hard/871_minimum_number_of_refueling_stops.rb) | [Link](./test/hard/test_871_minimum_number_of_refueling_stops.rb) | | 895. Maximum Frequency Stack | [Link](https://leetcode.com/problems/maximum-frequency-stack/) | [Link](./lib/hard/895_maximum_frequency_stack.rb) | [Link](./test/hard/test_895_maximum_frequency_stack.rb) | | 936. Stamping The Sequence | [Link](https://leetcode.com/problems/stamping-the-sequence/) | [Link](./lib/hard/936_stamping_the_sequence.rb) | [Link](./test/hard/test_936_stamping_the_sequence.rb) | +| 968. Binary Tree Cameras | [Link](https://leetcode.com/problems/binary-tree-cameras/) | [Link](./lib/hard/968_binary_tree_cameras.rb) | [Link](./test/hard/test_968_binary_tree_cameras.rb) | diff --git a/leetcode-ruby.gemspec b/leetcode-ruby.gemspec index 346aa27e..94c38ef4 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 = '8.0.1' + s.version = '8.0.2' s.license = 'MIT' s.files = ::Dir['lib/**/*.rb'] + %w[README.md] s.executable = 'leetcode-ruby' diff --git a/lib/common/binary_tree.rb b/lib/common/binary_tree.rb index c101db94..f5d15689 100644 --- a/lib/common/binary_tree.rb +++ b/lib/common/binary_tree.rb @@ -39,7 +39,4 @@ def ==(other) # @param {TreeNode} other # @return {Boolean} def eql?(other) = self == other - - # @return {Integer} - def hash = [@val].hash end diff --git a/lib/hard/968_binary_tree_cameras.rb b/lib/hard/968_binary_tree_cameras.rb new file mode 100644 index 00000000..b2ac2052 --- /dev/null +++ b/lib/hard/968_binary_tree_cameras.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: false + +# https://leetcode.com/problems/binary-tree-cameras/ +# @param {TreeNode} root +# @return {Integer} +def min_camera_cover(root) + @result = 0 + dfs_for_min_camera_cover(::Set.new([nil]), root, nil) + + @result +end + +private + +# @param {Set} cov +# @param {TreeNode} node +# @param {TreeNode} par +# @return {Void} +def dfs_for_min_camera_cover(cov, node, par) + return unless node + + dfs_for_min_camera_cover(cov, node.left, node) + dfs_for_min_camera_cover(cov, node.right, node) + + return unless !par && !cov.include?(node) || !cov.include?(node.left) || !cov.include?(node.right) + + @result += 1 + + cov << node + cov << par + cov << node.left + cov << node.right +end diff --git a/test/hard/test_968_binary_tree_cameras.rb b/test/hard/test_968_binary_tree_cameras.rb new file mode 100644 index 00000000..8415c380 --- /dev/null +++ b/test/hard/test_968_binary_tree_cameras.rb @@ -0,0 +1,50 @@ +# frozen_string_literal: false + +require_relative '../test_helper' +require_relative '../../lib/common/binary_tree' +require_relative '../../lib/hard/968_binary_tree_cameras' +require 'minitest/autorun' + +class BinaryTreeCamerasTest < ::Minitest::Test + def test_default_one + assert_equal( + 1, + min_camera_cover( + ::TreeNode.new( + 0, + ::TreeNode.new( + 0, + ::TreeNode.new(0), + ::TreeNode.new(0) + ), + nil + ) + ) + ) + end + + def test_default_two + assert_equal( + 2, + min_camera_cover( + ::TreeNode.new( + 0, + ::TreeNode.new( + 0, + ::TreeNode.new( + 0, + ::TreeNode.new( + 0, + nil, + ::TreeNode.new(0) + ), + nil + ), + nil + ), + nil + ) + ) + ) + end +end