描述
请实现有重复数字的升序数组的二分查找
给定一个 元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的第一个出现的target,如果目标值存在返回下标,否则返回 -1
示例1
输入:[1,2,4,4,5],4 返回值:2 说明:从左到右,查找到第1个为4的,下标为2,返回2
示例2
输入:[1,1,1,1,1],1 返回值:0
解法: 在有序的基础上,使用双指针确定左右边界,二分查找。
class Solution:
def search(self , nums , target ):
# write code here
if nums == []:
return -1
n = len(nums)
i, j = 0, n-1
mid = n//2
while i<=j:
if target > nums[mid]:
i = mid+1 #注意区间边界不再用
elif target < nums[mid]:
j = mid-1
elif target == nums[mid]:
while mid-1>=0 and nums[mid] == nums[mid-1]:
mid -= 1
return mid
mid = (i+j)//2
return -1