Skip to content

Commit 37a359a

Browse files
authoredJul 9, 2024
Merge pull request #666 from fartem/34_Find_First_and_Last_Position_of_Element_in_Sorted_Array
2024-07-09 v. 6.0.9: added "34. Find First and Last Position of Element in Sorted Array"
2 parents 5c9bfaf + dbe54a4 commit 37a359a

File tree

4 files changed

+80
-18
lines changed

4 files changed

+80
-18
lines changed
 

‎README.md

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -457,20 +457,21 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/).
457457

458458
### Medium
459459

460-
| Name | Link to LeetCode | Link to solution |
461-
|---------------------------------------------------|---------------------------------------------------------------------------------------|--------------------------------------------------------------------------|
462-
| 2. Add Two Numbers | [Link](https://leetcode.com/problems/add-two-numbers/) | [Link](./lib/medium/2_add_two_numbers.rb) |
463-
| 3. Longest Substring Without Repeating Characters | [Link](https://leetcode.com/problems/longest-substring-without-repeating-characters/) | [Link](./lib/medium/3_longest_substring_without_repeating_characters.rb) |
464-
| 5. Longest Palindromic Substring | [Link](https://leetcode.com/problems/longest-palindromic-substring/) | [Link](./lib/medium/5_longest_palindromic_substring.rb) |
465-
| 7. Reverse Integer | [Link](https://leetcode.com/problems/reverse-integer/) | [Link](./lib/medium/7_reverse_integer.rb) |
466-
| 8. String to Integer (atoi) | [Link](https://leetcode.com/problems/string-to-integer-atoi/) | [Link](./lib/medium/8_string_to_integer_atoi.rb) |
467-
| 11. Container With Most Water | [Link](https://leetcode.com/problems/container-with-most-water/) | [Link](./lib/medium/11_container_with_most_water.rb) |
468-
| 12. Integer to Roman | [Link](https://leetcode.com/problems/integer-to-roman/) | [Link](./lib/medium/12_integer_to_roman.rb) |
469-
| 15. 3Sum | [Link](https://leetcode.com/problems/3sum/) | [Link](./lib/medium/15_3sum.rb) |
470-
| 16. 3Sum Closest | [Link](https://leetcode.com/problems/3sum-closest/) | [Link](./lib/medium/16_3sum_closest.rb) |
471-
| 17. Letter Combinations of a Phone Number | [Link](https://leetcode.com/problems/letter-combinations-of-a-phone-number/) | [Link](./lib/medium/17_letter_combinations_of_a_phone_number.rb) |
472-
| 19. Remove Nth Node From End of List | [Link](https://leetcode.com/problems/remove-nth-node-from-end-of-list/) | [Link](./lib/medium/19_remove_nth_node_from_end_of_list.rb) |
473-
| 22. Generate Parentheses | [Link](https://leetcode.com/problems/generate-parentheses/) | [Link](./lib/medium/22_generate_parentheses.rb) |
474-
| 24. Swap Nodes in Pairs | [Link](https://leetcode.com/problems/swap-nodes-in-pairs/) | [Link](./lib/medium/24_swap_nodes_in_pairs.rb) |
475-
| 29. Divide Two Integers | [Link](https://leetcode.com/problems/divide-two-integers/) | [Link](./lib/medium/29_divide_two_integers.rb) |
476-
| 33. Search in Rotated Sorted Array | [Link](https://leetcode.com/problems/search-in-rotated-sorted-array/) | [Link](./lib/medium/33_search_in_rotated_sorted_array.rb) |
460+
| Name | Link to LeetCode | Link to solution |
461+
|-------------------------------------------------------------|------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|
462+
| 2. Add Two Numbers | [Link](https://leetcode.com/problems/add-two-numbers/) | [Link](./lib/medium/2_add_two_numbers.rb) |
463+
| 3. Longest Substring Without Repeating Characters | [Link](https://leetcode.com/problems/longest-substring-without-repeating-characters/) | [Link](./lib/medium/3_longest_substring_without_repeating_characters.rb) |
464+
| 5. Longest Palindromic Substring | [Link](https://leetcode.com/problems/longest-palindromic-substring/) | [Link](./lib/medium/5_longest_palindromic_substring.rb) |
465+
| 7. Reverse Integer | [Link](https://leetcode.com/problems/reverse-integer/) | [Link](./lib/medium/7_reverse_integer.rb) |
466+
| 8. String to Integer (atoi) | [Link](https://leetcode.com/problems/string-to-integer-atoi/) | [Link](./lib/medium/8_string_to_integer_atoi.rb) |
467+
| 11. Container With Most Water | [Link](https://leetcode.com/problems/container-with-most-water/) | [Link](./lib/medium/11_container_with_most_water.rb) |
468+
| 12. Integer to Roman | [Link](https://leetcode.com/problems/integer-to-roman/) | [Link](./lib/medium/12_integer_to_roman.rb) |
469+
| 15. 3Sum | [Link](https://leetcode.com/problems/3sum/) | [Link](./lib/medium/15_3sum.rb) |
470+
| 16. 3Sum Closest | [Link](https://leetcode.com/problems/3sum-closest/) | [Link](./lib/medium/16_3sum_closest.rb) |
471+
| 17. Letter Combinations of a Phone Number | [Link](https://leetcode.com/problems/letter-combinations-of-a-phone-number/) | [Link](./lib/medium/17_letter_combinations_of_a_phone_number.rb) |
472+
| 19. Remove Nth Node From End of List | [Link](https://leetcode.com/problems/remove-nth-node-from-end-of-list/) | [Link](./lib/medium/19_remove_nth_node_from_end_of_list.rb) |
473+
| 22. Generate Parentheses | [Link](https://leetcode.com/problems/generate-parentheses/) | [Link](./lib/medium/22_generate_parentheses.rb) |
474+
| 24. Swap Nodes in Pairs | [Link](https://leetcode.com/problems/swap-nodes-in-pairs/) | [Link](./lib/medium/24_swap_nodes_in_pairs.rb) |
475+
| 29. Divide Two Integers | [Link](https://leetcode.com/problems/divide-two-integers/) | [Link](./lib/medium/29_divide_two_integers.rb) |
476+
| 33. Search in Rotated Sorted Array | [Link](https://leetcode.com/problems/search-in-rotated-sorted-array/) | [Link](./lib/medium/33_search_in_rotated_sorted_array.rb) |
477+
| 34. Find First and Last Position of Element in Sorted Array | [Link](https://leetcode.com/problems/find-first-and-last-position-of-element-in-sorted-array/) | [Link](./lib/medium/34_find_first_and_last_position_of_element_in_sorted_array.rb) |

‎leetcode-ruby.gemspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ require 'English'
55
::Gem::Specification.new do |s|
66
s.required_ruby_version = '>= 3.0'
77
s.name = 'leetcode-ruby'
8-
s.version = '6.0.8'
8+
s.version = '6.0.9'
99
s.license = 'MIT'
1010
s.files = ::Dir['lib/**/*.rb'] + %w[bin/leetcode-ruby README.md LICENSE]
1111
s.executable = 'leetcode-ruby'
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# frozen_string_literal: true
2+
3+
# https://leetcode.com/problems/find-first-and-last-position-of-element-in-sorted-array/
4+
# @param {Integer[]} nums
5+
# @param {Integer} target
6+
# @return {Integer[]}
7+
def search_range(nums, target)
8+
h = nums.length - 1
9+
s = find_start(nums, target, 0, h)
10+
11+
return [-1, -1] if s == -1
12+
13+
e = find_end(nums, target, 0, h)
14+
15+
[s, e]
16+
end
17+
18+
# @param {Integer[]} nums
19+
# @param {Integer} target
20+
# @param {Integer} l
21+
# @param {Integer} h
22+
# @return {Integer}
23+
def find_start(nums, target, l, h)
24+
return -1 if h < l
25+
26+
m = l + (h - l) / 2
27+
num = nums[m]
28+
29+
return m if (m.zero? || target > nums[m - 1]) && num == target
30+
31+
target > num ? find_start(nums, target, m + 1, h) : find_start(nums, target, l, m - 1)
32+
end
33+
34+
# @param {Integer[]} nums
35+
# @param {Integer} target
36+
# @param {Integer} l
37+
# @param {Integer} h
38+
# @return {Integer}
39+
def find_end(nums, target, l, h)
40+
return -1 if h < l
41+
42+
m = l + (h - l) / 2
43+
num = nums[m]
44+
45+
return m if (m == nums.length - 1 || target < nums[m + 1]) && num == target
46+
47+
target < num ? find_end(nums, target, l, m - 1) : find_end(nums, target, m + 1, h)
48+
end
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# frozen_string_literal: true
2+
3+
require_relative '../test_helper'
4+
require_relative '../../lib/medium/34_find_first_and_last_position_of_element_in_sorted_array'
5+
require 'minitest/autorun'
6+
7+
class SearchInRotatedSortedArrayTest < ::Minitest::Test
8+
def test_default
9+
assert_equal([3, 4], search_range([5, 7, 7, 8, 8, 10], 8))
10+
assert_equal([-1, -1], search_range([5, 7, 7, 8, 8, 10], 6))
11+
assert_equal([-1, -1], search_range([], 0))
12+
end
13+
end

0 commit comments

Comments
 (0)