简单题1:704. 二分查找
题目:
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
输入:nums = [-1,0,3,5,9,12], target = 9
输出: 4 解释: 9 出现在 nums中并且下标为 4
解法:当看到题目中有“有序”、“升序”,“降序”等关键字,或者隐含顺序关系的时候 ,优先考虑二分法。
class Solution:
def search(self, nums: List[int], target: int) -> int:
if not nums:
return -1
start = 0
end = len(nums)-1
while(start <= end):
# 计算mid的时候使用start + (end - start)//2,
# 尽量不要使用mid = (start + end) // 2,因为两数相加容易越界(python不用担心越界问题,只要内存够大就不会产生越界,强类型语言要考虑越界)
mid = start + (end - start)//2
if nums[mid] == target:
return mid
if nums[mid] < target:
start = mid + 1
else:
end = mid -1
return -1