题目
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
Given an array of integers nums which is sorted in ascending order, and an integer target, write a function to search target in nums. If target exists, then return its index. Otherwise, return -1.
You must write an algorithm with O(log n) runtime complexity.
要点
- nums已经是升序排列
- 时间复杂度: O(logn)
代码
class Solution:
def search(self, nums: List[int], target: int) -> int:
l=0
r=len(nums)-1
while(l<=r):
mid = (l+r)//2
if nums[mid]<target:
l = mid+1
elif nums[mid]>target:
r = mid-1
else:
return mid
return -1
分析
二分查找(binary search)是算法中必须掌握的基础算法之一。其特征是每次查找都会把查找范围缩短一半,故时间复杂度为O(logn),默认以2为底。举例:nums = [1,2,3,4,5,6,7,8], 最坏情况下需要log(8)=3次即可找到结果。
一点细节
python中 // 符号会返回整数结果(向下取整)