Skip to content

Commit e24247f

Browse files
authored
Fix search_range and add test (keon#868)
1 parent fd86fd1 commit e24247f

File tree

2 files changed

+12
-7
lines changed

2 files changed

+12
-7
lines changed

algorithms/search/search_range.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,17 @@ def search_range(nums, target):
1717
"""
1818
low = 0
1919
high = len(nums) - 1
20-
while low <= high:
20+
# breaks at low == high
21+
# both pointing to first occurence of target
22+
while low < high:
2123
mid = low + (high - low) // 2
22-
if target < nums[mid]:
23-
high = mid - 1
24-
elif target > nums[mid]:
25-
low = mid + 1
24+
if target <= nums[mid]:
25+
high = mid
2626
else:
27-
break
27+
low = mid + 1
2828

2929
for j in range(len(nums) - 1, -1, -1):
3030
if nums[j] == target:
31-
return [mid, j]
31+
return [low, j]
3232

3333
return [-1, -1]

tests/test_search.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,11 @@ def test_search_range(self):
9191
self.assertEqual([1, 2], search_range(array, 7))
9292
self.assertEqual([-1, -1], search_range(array, 11))
9393

94+
array = [5, 7, 7, 7, 7, 8, 8, 8, 8, 10]
95+
self.assertEqual([5, 8], search_range(array, 8))
96+
self.assertEqual([1, 4], search_range(array, 7))
97+
self.assertEqual([-1, -1], search_range(array, 11))
98+
9499
def test_find_min_rotate(self):
95100
array = [4, 5, 6, 7, 0, 1, 2]
96101
self.assertEqual(0, find_min_rotate(array))

0 commit comments

Comments
 (0)