二分查找1

🎯 问题描述(来源于LeetCode)

描述
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果 target 存在返回下标,否则返回 -1
你必须编写一个具有 O(log n) 时间复杂度的算法。
说明

  1. 你可以假设 nums 中的所有元素是不重复的。
  2. n 将在 [1, 10000]之间。
  3. nums 的每个元素都将在 [-9999, 9999]之间。

示例

  • 示例 1:
1
2
3
输入: nums = [-1,0,3,5,9,12], target = 9
输出 4
解释 9 出现在 `nums` 中并且下标为 4
  • 示例 2:
1
2
3
输入: nums = [-1,0,3,5,9,12], target = 2
输出: -1
解释: 2 不存在 `nums` 中因此返回 -1

💻 解题思路

思路1:二分查找

思路1:代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution:
def search(self, nums: List[int], target: int) -> int:
l=len(nums)
left,right=0,l-1
while left<=right:
mid=(left+right)//2
if target<nums[mid]:
right=mid-1
if target>nums[mid]:
left=mid+1
if target==nums[mid]:
return mid
return -1

思路1:📊 性能分析

提交结果
  • 运行时间:0ms击败100.00%
  • 内存消耗:20.20MB击败52.22%
复杂度验证
  • 时间复杂度:O(LogN)O(LogN)
  • 空间复杂度:O(1)O(1)

思考