Python3二分查找
问题描述:
给定一个排序的整数数组(升序)和一个要查找的整数target,用O(logn)的时间查找到target第一次出现的下标(从0开始),如果target不存在于数组中,返回-1。
样例
样例 1:
输入:[1,4,4,5,7,7,8,9,9,10],1
输出: 0
样例解释:
第一次出现在第0个位置。
样例 2:
输入: [1, 2, 3, 3, 4, 5, 10],3
输出: 2
样例解释:
第一次出现在第2个位置
样例 3:
输入: [1, 2, 3, 3, 4, 5, 10],6
输出: -1
样例解释:
没有出现过6, 返回-1
代码:
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
low=0
high=len(nums)-1
while low<=high:
mid=(low+high)//2
if nums[mid]<target:
low=mid+1
else:
high=mid-1
if nums[low]==target:
return low
if nums[high]==target:
return high
return -1
问题原型:
def binarySearch(self, nums, target):
# write your code here
low = 0
high = len(nums) - 1
while low <= high:
mid = (low + high) // 2
if nums[mid] == target:
return mid
elif target < nums[mid]:
high = mid - 1
else:
low = mid + 1
return -1
新的改变
该问题中要求了如果目标值等于数组中的重复元素,则返回第一个元素位置
而原二分查找问题中并没有要求返回target第一次出现的下标