diff --git a/README.md b/README.md index 3b83d0ca..c9fada5a 100644 --- a/README.md +++ b/README.md @@ -486,3 +486,4 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/). | 54. Spiral Matrix | [Link](https://leetcode.com/problems/spiral-matrix/) | [Link](./lib/medium/54_spiral_matrix.rb) | | 55. Jump Game | [Link](https://leetcode.com/problems/jump-game/) | [Link](./lib/medium/55_jump_game.rb) | | 56. Merge Intervals | [Link](https://leetcode.com/problems/merge-intervals/) | [Link](./lib/medium/56_merge_intervals.rb) | +| 57. Insert Interval | [Link](https://leetcode.com/problems/insert-interval/) | [Link](./lib/medium/57_insert_interval.rb) | diff --git a/leetcode-ruby.gemspec b/leetcode-ruby.gemspec index 8c3436d5..f89b4feb 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.2.0' + s.version = '6.2.1' s.license = 'MIT' s.files = ::Dir['lib/**/*.rb'] + %w[bin/leetcode-ruby README.md LICENSE] s.executable = 'leetcode-ruby' diff --git a/lib/medium/57_insert_interval.rb b/lib/medium/57_insert_interval.rb new file mode 100644 index 00000000..fca3e553 --- /dev/null +++ b/lib/medium/57_insert_interval.rb @@ -0,0 +1,34 @@ +# frozen_string_literal: true + +# https://leetcode.com/problems/insert-interval/ +# @param {Integer[][]} intervals +# @param {Integer[]} new_interval +# @return {Integer[][]} +def insert(intervals, new_interval) + result = [] + n = intervals.length + p = 0 + + while p < n && intervals[p][1] < new_interval[0] + result << intervals[p] + + p += 1 + end + + while p < n && intervals[p][0] <= new_interval[1] + new_interval[0] = [new_interval[0], intervals[p][0]].min + new_interval[1] = [new_interval[1], intervals[p][1]].max + + p += 1 + end + + result << new_interval + + while p < n + result << intervals[p] + + p += 1 + end + + result +end diff --git a/test/medium/test_57_insert_interval.rb b/test/medium/test_57_insert_interval.rb new file mode 100644 index 00000000..f71311a8 --- /dev/null +++ b/test/medium/test_57_insert_interval.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +require_relative '../test_helper' +require_relative '../../lib/medium/57_insert_interval' +require 'minitest/autorun' + +class InsertIntervalTest < ::Minitest::Test + def test_default + assert_equal([[1, 5], [6, 9]], insert([[1, 3], [6, 9]], [2, 5])) + assert_equal([[1, 2], [3, 10], [12, 16]], insert([[1, 2], [3, 5], [6, 7], [8, 10], [12, 16]], [4, 8])) + end +end