Leetcode:704. 二分查找

力扣题目链接

解题思路

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

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

二分查找的思路如下:

  • 设定左右指针
  • 找到中间位置mid,将数组分为左右两块区域
  • 若numsmid==target,则找到了目标值,返回该位置下标
  • 若numsmid>target,则说明目标值在左区域,将右指针移到中间
  • 若numsmid<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;
    }
}
相关推荐
一起努力啊~40 分钟前
算法题打卡力扣第1658题:将 x 减到 0 的最小操作数(mid)
学习·leetcode
和裕1 小时前
平口开槽箱 vs 飞机盒 vs 扣底盒:自动化、展示效果与成本核心区别
大数据·运维·网络·人工智能·算法·自动化
AgentMaster1 小时前
从售前到售后全链路覆盖:智能客服在企业 5 大场景的落地实践与工具选型
大数据·人工智能·算法
Cccp.1231 小时前
【leetcode】(六) 图和贪心算法
数据结构·算法·leetcode
y1su1 小时前
【Leetcode】1477. 找两个和为目标值且不重叠的子数组
数据结构·后端·算法·leetcode·职场和发展
不会就选b9 小时前
算法日常・每日刷题--<贪心>14
算法
mmmmath_312 小时前
LeetCode.541.反转字符串II
数据结构·算法·leetcode
Navigator_Z12 小时前
LeetCode //MySQL - 1251. Average Selling Price
c语言·算法·leetcode
醇氧13 小时前
MySQL 8.0 系统表损坏与引擎转换故障排查实战
数据结构·算法