描述
给定一个排序的整数数组(升序)和一个要查找的整数 target
,用O(logn)的时间查找到target
第一次出现的下标(从0
开始),如果target
不存在于数组中,返回-1
。
样例
样例 1:
输入:
数组 = [1,4,4,5,7,7,8,9,9,10]
target = 1
输出:
0
解释:
第一次出现在第0个位置。
样例 2:
输入:
数组 = [1, 2, 3, 3, 4, 5, 10]
target = 3
输出:
2
解释:
第一次出现在第2个位置
样例 3:
输入:
数组 = [1, 2, 3, 3, 4, 5, 10]
target = 6
输出:
-1
解释:
没有出现过6, 返回-1
这里我说一下,所有时间复杂度要求为logn的算法,基本都是用二分法来做。二分查找有点意思,这道题是找第一个target数,但其实也可以找最后一个target数。
这道题的升级版请看:https://blog.csdn.net/wenqiwenqi123/article/details/116273701
直接上代码吧:
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 nums is None or len(nums)==0:
return -1
start,end=0,len(nums)-1
while start+1<end:
mid=start+(end-start)//2
if nums[mid]==target:
end=mid
if nums[mid]<target:
start=mid
if nums[mid]>target:
end=mid
if nums[start]==target:
return start
if nums[end]==target:
return end
return -1
nums=[1, 2, 3, 3, 4, 5, 10]
target=3
s = Solution()
print(s.binarySearch(nums,target))