Leetcode:704. 二分查找

力扣题目链接

解题思路

首先很容易想到暴力解法,通过简单的遍历数组,来找到目标值,但这样的时间复杂度为O(n).

根据题目和提示,所给数组是①有序②无重复元素,满足二分查找的前提条件,因此本题可用二分查找来做.

二分查找的思路如下:

  • 设定左右指针
  • 找到中间位置mid,将数组分为左右两块区域
  • 若nums[mid]==target,则找到了目标值,返回该位置下标
  • 若nums[mid]>target,则说明目标值在左区域,将右指针移到中间
  • 若nums[mid]<target,则说明目标值在右区域,将左指针移到中间

二分查找的条件是查找范围不为空,即left<=right;每次查找都会将查找范围缩小为一半,因此最多的查找次数为\log_2N,时间复杂度为O(\log_N)

小细节:在二分查找之前,可以先判断目标值是否在查找范围内,这样可以提高效率.

代码如下:

复制代码
class Solution {
    public int search(int[] nums, int target) {
     int l = 0 , r = nums.length - 1;
     if ( target < nums[0] || target > nums[r]) return -1;
     while ( l <= r) {
         int mid = l + r >> 1;
         if (nums[mid] == target) return mid;
         else if (nums[mid] < target) l = mid + 1;
         else r = mid - 1;
     }
     return -1;
    }
}
相关推荐
代码游侠34 分钟前
复习——栈、队列、树、哈希表
linux·数据结构·学习·算法
碧海银沙音频科技研究院1 小时前
基于物奇wq7036与恒玄bes2800智能眼镜设计
arm开发·人工智能·深度学习·算法·分类
小白程序员成长日记2 小时前
2025.12.03 力扣每日一题
算法·leetcode·职场和发展
元亓亓亓2 小时前
LeetCode热题100--20. 有效的括号--简单
linux·算法·leetcode
熊猫_豆豆2 小时前
LeetCode 49.字母异位组合 C++解法
数据结构·算法·leetcode
ModestCoder_3 小时前
强化学习 Policy 的 Tracking 能力全解析,以Legged_gym为例解说Policy的训练流程
人工智能·算法·自然语言处理·机器人·具身智能
小武~3 小时前
Leetcode 每日一题C 语言版 -- 234 basic calculator
linux·c语言·leetcode
小白程序员成长日记3 小时前
2025.12.02 力扣每日一题
数据结构·算法·leetcode
永远都不秃头的程序员(互关)3 小时前
在vscodeC语言多文件编译实战指南
c语言·数据结构·算法
立志成为大牛的小牛4 小时前
数据结构——五十三、处理冲突的方法——拉链法(王道408)
数据结构·学习·考研·算法