题目:
请实现有重复数字的升序数组的二分查找
给定一个元素有序的(升序)长度为n的整型数组 nums 和一个目标值 target,写一个函数搜索 nums 中的第一个出现的target,如果目标值存在返回下标,否则返回 -1
举例:
例1:
输入:[1,2,4,4,5],4
返回值:2
说明:从左到右,查找到第1个为4的,下标为2,返回2
例2:
输入:[1,2,4,4,5],3
返回值:-1
例3:
输入:[1,1,1,1,1],1
返回值:0
考察二分查找,直接上代码:
def search(nums,target):
left = 0
right = len(nums) - 1
while left <= right:
mid = (left + right) // 2
if nums[mid] > target:
left = mid + 1
elif nums[mid] < target:
right = mid - 1
else:
for index in range(mid + 1):
if nums[index] == target:
return index
return -1
if __name__ == "__main__":
nums = list(map(int,input("请输入:").split(',')))
result = search(nums[:-1],nums[-1])
print(result)