题目
给定一个 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=0r=len(nums)-1while(l<=r):mid = (l+r)//2if nums[mid]<target:l = mid+1elif nums[mid]>target:r = mid-1else:return midreturn -1
分析
二分查找(binary search)是算法中必须掌握的基础算法之一。其特征是每次查找都会把查找范围缩短一半,故时间复杂度为O(logn),默认以2为底。举例:nums = [1,2,3,4,5,6,7,8], 最坏情况下需要log(8)=3次即可找到结果。
一点细节
python中 // 符号会返回整数结果(向下取整)
