From e571f31daac9cb196e4cabe47cd988267457190c Mon Sep 17 00:00:00 2001 From: fartem Date: Fri, 10 Jan 2025 11:24:52 +0300 Subject: [PATCH] 2025-01-10 v. 7.8.9: added "871. Minimum Number of Refueling Stops" --- README.md | 1 + leetcode-ruby.gemspec | 2 +- .../871_minimum_number_of_refueling_stops.rb | 21 +++++++++ ...t_871_minimum_number_of_refueling_stops.rb | 47 +++++++++++++++++++ 4 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 lib/hard/871_minimum_number_of_refueling_stops.rb create mode 100644 test/hard/test_871_minimum_number_of_refueling_stops.rb diff --git a/README.md b/README.md index 9fc6d442..55051f9f 100644 --- a/README.md +++ b/README.md @@ -658,3 +658,4 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/). | 336. Palindrome Pairs | [Link](https://leetcode.com/problems/palindrome-pairs/) | [Link](./lib/hard/336_palindrome_pairs.rb) | [Link](./test/hard/test_336_palindrome_pairs.rb) | | 363. Max Sum of Rectangle No Larger Than K | [Link](https://leetcode.com/problems/max-sum-of-rectangle-no-larger-than-k/) | [Link](./lib/hard/363_max_sum_of_rectangle_no_larger_than_k.rb) | [Link](./test/hard/test_363_max_sum_of_rectangle_no_larger_than_k.rb) | | 458. Poor Pigs | [Link](https://leetcode.com/problems/poor-pigs/) | [Link](./lib/hard/458_poor_pigs.rb) | [Link](./test/hard/test_458_poor_pigs.rb) | +| 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) | diff --git a/leetcode-ruby.gemspec b/leetcode-ruby.gemspec index f9d5d9ab..0d0ec44e 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 = '7.8.8' + s.version = '7.8.9' s.license = 'MIT' s.files = ::Dir['lib/**/*.rb'] + %w[README.md] s.executable = 'leetcode-ruby' diff --git a/lib/hard/871_minimum_number_of_refueling_stops.rb b/lib/hard/871_minimum_number_of_refueling_stops.rb new file mode 100644 index 00000000..d6e33554 --- /dev/null +++ b/lib/hard/871_minimum_number_of_refueling_stops.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +# https://leetcode.com/problems/minimum-number-of-refueling-stops/ +# @param {Integer} target +# @param {Integer} start_fuel +# @param {Integer[][]} stations +# @return {Integer} +def min_refuel_stops(target, start_fuel, stations) + dp = ::Array.new(stations.size + 1, 0) + dp[0] = start_fuel + + (0...stations.size).each do |i| + (0..i).reverse_each do |j| + dp[j + 1] = [dp[j + 1], dp[j] + stations[i][1]].max if dp[j] >= stations[i][0] + end + end + + (0..stations.size).each { |i| return i if dp[i] >= target } + + -1 +end diff --git a/test/hard/test_871_minimum_number_of_refueling_stops.rb b/test/hard/test_871_minimum_number_of_refueling_stops.rb new file mode 100644 index 00000000..d44845fa --- /dev/null +++ b/test/hard/test_871_minimum_number_of_refueling_stops.rb @@ -0,0 +1,47 @@ +# frozen_string_literal: true + +require_relative '../test_helper' +require_relative '../../lib/hard/871_minimum_number_of_refueling_stops' +require 'minitest/autorun' + +class MinimumNumberOfRefuelingStopsTest < ::Minitest::Test + def test_default_one + assert_equal( + 0, + min_refuel_stops( + 1, + 1, + [] + ) + ) + end + + def test_default_two + assert_equal( + -1, + min_refuel_stops( + 100, + 1, + [ + [10, 100] + ] + ) + ) + end + + def test_default_three + assert_equal( + 2, + min_refuel_stops( + 100, + 10, + [ + [10, 60], + [20, 30], + [30, 30], + [60, 40] + ] + ) + ) + end +end