From 2c85b404000ca5cab7d75af1c086b6e39c796527 Mon Sep 17 00:00:00 2001 From: fartem Date: Fri, 15 Nov 2024 10:11:57 +0300 Subject: [PATCH 1/2] 2024-11-15 v. 7.0.4: added "435. Non-overlapping Intervals" --- README.md | 1 + leetcode-ruby.gemspec | 2 +- lib/medium/435_non_overlapping_intervals.rb | 20 ++++++++ .../test_435_non_overlapping_intervals.rb | 46 +++++++++++++++++++ 4 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 lib/medium/435_non_overlapping_intervals.rb create mode 100644 test/medium/test_435_non_overlapping_intervals.rb diff --git a/README.md b/README.md index 095a8fef..17ebcd65 100644 --- a/README.md +++ b/README.md @@ -569,3 +569,4 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/). | 417. Pacific Atlantic Water Flow | [Link](https://leetcode.com/problems/pacific-atlantic-water-flow/) | [Link](./lib/medium/417_pacific_atlantic_water_flow.rb) | [Link](./test/medium/test_417_pacific_atlantic_water_flow.rb) | | 424. Longest Repeating Character Replacement | [Link](https://leetcode.com/problems/longest-repeating-character-replacement/) | [Link](./lib/medium/424_longest_repeating_character_replacement.rb) | [Link](./test/medium/test_424_longest_repeating_character_replacement.rb) | | 429. N-ary Tree Level Order Traversal | [Link](https://leetcode.com/problems/n-ary-tree-level-order-traversal/) | [Link](./lib/medium/429_n_ary_tree_level_order_traversal.rb) | [Link](./test/medium/test_429_n_ary_tree_level_order_traversal.rb) | +| 435. Non-overlapping Intervals | [Link](https://leetcode.com/problems/non-overlapping-intervals/) | [Link](./lib/medium/435_non_overlapping_intervals.rb) | [Link](./test/medium/test_435_non_overlapping_intervals.rb) | diff --git a/leetcode-ruby.gemspec b/leetcode-ruby.gemspec index f0022c50..8ce59b91 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.0.3' + s.version = '7.0.4' s.license = 'MIT' s.files = ::Dir['lib/**/*.rb'] + %w[README.md] s.executable = 'leetcode-ruby' diff --git a/lib/medium/435_non_overlapping_intervals.rb b/lib/medium/435_non_overlapping_intervals.rb new file mode 100644 index 00000000..a4934591 --- /dev/null +++ b/lib/medium/435_non_overlapping_intervals.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +# https://leetcode.com/problems/non-overlapping-intervals/ +# @param {Integer[][]} intervals +# @return {Integer} +def erase_overlap_intervals(intervals) + intervals.sort_by(&:first) + max = intervals.first.last + result = 0 + intervals.each do |inter| + if inter.first < max + result += 1 + max = [max, inter.last].min + else + max = inter.last + end + end + + result - 1 +end diff --git a/test/medium/test_435_non_overlapping_intervals.rb b/test/medium/test_435_non_overlapping_intervals.rb new file mode 100644 index 00000000..aaa88c79 --- /dev/null +++ b/test/medium/test_435_non_overlapping_intervals.rb @@ -0,0 +1,46 @@ +# frozen_string_literal: true + +require_relative '../test_helper' +require_relative '../../lib/medium/435_non_overlapping_intervals' +require 'minitest/autorun' + +class NonOverlappingIntervalsTest < ::Minitest::Test + def test_default_one + assert_equal( + 1, + erase_overlap_intervals( + [ + [1, 2], + [2, 3], + [3, 4], + [1, 3] + ] + ) + ) + end + + def test_default_two + assert_equal( + 2, + erase_overlap_intervals( + [ + [1, 2], + [1, 2], + [1, 2] + ] + ) + ) + end + + def test_default_three + assert_equal( + 0, + erase_overlap_intervals( + [ + [1, 2], + [2, 3] + ] + ) + ) + end +end From a1e2a72e4cd1de3eed796eb2900af4d37343c989 Mon Sep 17 00:00:00 2001 From: fartem Date: Fri, 15 Nov 2024 10:13:53 +0300 Subject: [PATCH 2/2] 2024-11-15 v. 7.0.4: fixed "435. Non-overlapping Intervals" --- lib/medium/435_non_overlapping_intervals.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/medium/435_non_overlapping_intervals.rb b/lib/medium/435_non_overlapping_intervals.rb index a4934591..372958a9 100644 --- a/lib/medium/435_non_overlapping_intervals.rb +++ b/lib/medium/435_non_overlapping_intervals.rb @@ -4,7 +4,7 @@ # @param {Integer[][]} intervals # @return {Integer} def erase_overlap_intervals(intervals) - intervals.sort_by(&:first) + intervals.sort_by!(&:first) max = intervals.first.last result = 0 intervals.each do |inter|