From 56106c02cb40b3bcd57f823b87489efc0e98648a Mon Sep 17 00:00:00 2001 From: fartem Date: Tue, 10 Dec 2024 09:05:01 +0300 Subject: [PATCH] 2024-12-10 v. 7.2.9: added "581. Shortest Unsorted Continuous Subarray" --- README.md | 1 + leetcode-ruby.gemspec | 2 +- ...1_shortest_unsorted_continuous_subarray.rb | 18 ++++++++++ ...1_shortest_unsorted_continuous_subarray.rb | 34 +++++++++++++++++++ 4 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 lib/medium/581_shortest_unsorted_continuous_subarray.rb create mode 100644 test/medium/test_581_shortest_unsorted_continuous_subarray.rb diff --git a/README.md b/README.md index 8013a91a..8e9dc04a 100644 --- a/README.md +++ b/README.md @@ -594,3 +594,4 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/). | 538. Convert BST to Greater Tree | [Link](https://leetcode.com/problems/convert-bst-to-greater-tree/) | [Link](./lib/medium/538_convert_bst_to_greater_tree.rb) | [Link](./test/medium/test_538_convert_bst_to_greater_tree.rb) | | 556. Next Greater Element III | [Link](https://leetcode.com/problems/next-greater-element-iii/) | [Link](./lib/medium/556_next_greater_element_iii.rb) | [Link](./test/medium/test_556_next_greater_element_iii.rb) | | 560. Subarray Sum Equals K | [Link](https://leetcode.com/problems/subarray-sum-equals-k/) | [Link](./lib/medium/560_subarray_sum_equals_k.rb) | [Link](./test/medium/test_560_subarray_sum_equals_k.rb) | +| 581. Shortest Unsorted Continuous Subarray | [Link](https://leetcode.com/problems/shortest-unsorted-continuous-subarray/) | [Link](./lib/medium/581_shortest_unsorted_continuous_subarray.rb) | [Link](./test/medium/test_581_shortest_unsorted_continuous_subarray.rb) | diff --git a/leetcode-ruby.gemspec b/leetcode-ruby.gemspec index ad6f5689..4dfbe5bb 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.2.8' + s.version = '7.2.9' s.license = 'MIT' s.files = ::Dir['lib/**/*.rb'] + %w[README.md] s.executable = 'leetcode-ruby' diff --git a/lib/medium/581_shortest_unsorted_continuous_subarray.rb b/lib/medium/581_shortest_unsorted_continuous_subarray.rb new file mode 100644 index 00000000..7b25e263 --- /dev/null +++ b/lib/medium/581_shortest_unsorted_continuous_subarray.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +# https://leetcode.com/problems/shortest-unsorted-continuous-subarray/ +# @param {Integer[]} nums +# @return {Integer} +def find_unsorted_subarray(nums) + sorted = nums.sort + start = nums.size + nd = 0 + (0...nums.size).each do |i| + next if nums[i] == sorted[i] + + start = [start, i].min + nd = [nd, i].max + end + + nd - start >= 0 ? nd - start + 1 : 0 +end diff --git a/test/medium/test_581_shortest_unsorted_continuous_subarray.rb b/test/medium/test_581_shortest_unsorted_continuous_subarray.rb new file mode 100644 index 00000000..90603951 --- /dev/null +++ b/test/medium/test_581_shortest_unsorted_continuous_subarray.rb @@ -0,0 +1,34 @@ +# frozen_string_literal: true + +require_relative '../test_helper' +require_relative '../../lib/medium/581_shortest_unsorted_continuous_subarray' +require 'minitest/autorun' + +class ShortestUnsortedContinuousSubarrayTest < ::Minitest::Test + def test_default_one + assert_equal( + 5, + find_unsorted_subarray( + [2, 6, 4, 8, 10, 9, 15] + ) + ) + end + + def test_default_two + assert_equal( + 0, + find_unsorted_subarray( + [1, 2, 3, 4] + ) + ) + end + + def test_default_three + assert_equal( + 0, + find_unsorted_subarray( + [1] + ) + ) + end +end