这篇文章讲解的是LintCode第61题:在有序数组中查找target的左右边界—Search for a Range
Example
Example 1:
Input:
[]
9
Output:
[-1,-1]
Example 2:
Input:
[5, 7, 7, 8, 8, 10]
8
Output:
[3, 4]
思路是先找到左边界,在找到右边界:
class Solution:
"""
@param A: an integer sorted array
@param target: an integer to be inserted
@return: a list of length 2, [index1, index2]
"""
def searchRange(self, A, target):
# write your code here
if not A:
return [-1, -1]
leftBound, rightBound = 0, 0
start, end = 0, len(A) - 1
while start + 1 < end:
mid = start + (end - start) // 2
if A[mid] < target:
start = mid
else:
end = mid
if A[start] == target:
leftBound = start
elif A[end] == target:
leftBound = end
else:
leftBound, rightBound = -1, -1
start, end = 0, len(A) - 1
while start + 1 < end:
mid = start + (end - start) // 2
if A[mid] > target:
end = mid
else:
start = mid
if A[end] == target:
rightBound = end
elif A[start] == target:
rightBound = start
return [leftBound, rightBound]