就是一个二分法判断,这里唯一多了一个重复的,我们要寻找第一次出现的,所以我们找到后,还要判断找的元素前面一位是否也等于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