1.问题描述:
给定一个排序的整数数组(升序)和一个要查找的整数target
,用O(logn)
的时间查找到target第一次出现的下标(从0开始),如果target不存在于数组中,返回-1
。
2.样例:
在数组 [1, 2, 3, 3, 4, 5, 10]
中二分查找3
,返回2
。
3.代码:
class Solution:
# @param nums: The integer array
# @param target: Target number to find
# @return the first position of target in nums, position start from 0
def binarySearch(self, nums, target):
# write your code here
length=len(nums)
start=0
end=length
mid=(end-start)/2
while start<=end:
if nums[mid]<target:
start=mid+1
mid=(end+start)/2
elif nums[mid]>target:
end=mid-1
mid=(end-start)/2
else:
while nums[mid]==target:
mid-=1
return mid+1
return -1
本题是二分查找内容,但是因为测试数组中存在相同的数,需要返回第一个。所以,在二分查找的基础上增加了一些内容。
对于二分查找要注意,当大于或小于时,移动start或end标示:start = mid+1 或 end = mid-1
当找到target目标值时,通过不断mid-1 来取得第一个target值。