就是一个二分法判断,这里唯一多了一个重复的,我们要寻找第一次出现的,所以我们找到后,还要判断找的元素前面一位是否也等于target,如果是,返回就要-1,一直找到前面一位不是的时候,就是我们说的出现的第一次的元素的下标。由于前面为了寻找重复的,所以下标放在了我们答案的前面一位,返回就需要+1.
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 如果目标值存在返回下标,否则返回 -1
# @param nums int整型一维数组
# @param target int整型
# @return int整型
#
class Solution:
def search(self , nums , target ):
# write code here
left,right=0,len(nums)-1
while left<=right:
mid=(left+right)//2
if nums[mid]==target:
temp=mid
while temp>=0 and nums[temp] == target:
temp -= 1
return temp + 1
elif nums[mid]>target:
right=mid-1
else:
left=mid+1
else:
return -1