这篇文章讲解的是LintCode第14题:寻找有序数组中第一次出现的目标值—First Position of Target
这题只要在二分查找的模板上加以修改即可:
class Solution:
"""
@param nums: The integer array.
@param target: Target to find.
@return: The first position of target. Position starts from 0.
"""
def binarySearch(self, nums, target):
# write your code here
if not nums:
return -1
start, end = 0, len(nums) - 1
while start + 1 < end:
mid = start + (end - start) // 2
if nums[mid] < target:
start = mid
elif nums[mid] >= target:
end = mid
if nums[start] == target:
return start
if nums[end] == target:
return end
return -1
同理在第458题查找最后一个出现的目标值索引时,只需要将等号位置换成<=即可。
class Solution:
"""
@param nums: An integer array sorted in ascending order
@param target: An integer
@return: An integer
"""
def lastPosition(self, nums, target):
# write your code here
if not nums:
return -1
start, end = 0, len(nums) - 1
while start + 1 < end:
mid = start + (end - start) // 2
if nums[mid] < target:
start = mid
elif nums[mid] > target:
end = mid
else:
start = mid
if nums[end] == target:
return end
if nums[start] == target:
return start
return -1