当前位置: 首页 > news >正文

704. 二分查找

1、题目链接

https://leetcode.cn/problems/binary-search/description/

2、题目描述

704、 二分查找
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
示例 1:
输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4
解释: 9 出现在 nums 中并且下标为 4
示例 2:
输入: nums = [-1,0,3,5,9,12], target = 2
输出: -1
解释: 2 不存在 nums 中因此返回 -1
提示:
你可以假设 nums 中的所有元素是不重复的。
n 将在 [1, 10000]之间。
nums 的每个元素都将在 [-9999, 9999]之间。

3、题解

二分查找算法详解与实现

解题步骤
  1. 初始化边界:设定两个指针leftright,分别指向数组的起始位置和结束位置。
  2. 循环条件:当left小于等于right时,继续搜索。否则,返回-1表示未找到目标值。
  3. 计算中间点:取leftright的中间值mid,防止溢出可以使用mid = left + (right - left) / 2
  4. 比较中间点与目标值
    • 如果nums[mid]等于目标值target,返回当前mid作为结果。
    • 如果nums[mid]小于目标值,说明目标值在右半部分,更新leftmid + 1
    • 如果nums[mid]大于目标值,说明目标值在左半部分,更新rightmid - 1
  5. 返回结果:如果循环结束仍未找到目标值,则返回-1。
实现代码
Java
public int search(int[] nums, int target) {
    int left = 0, right = nums.length - 1;
    while (left <= right) {
        int mid = left + (right - left) / 2;
        if (nums[mid] == target) return mid;
        else if (nums[mid] < target) left = mid + 1;
        else right = mid - 1;
    }
    return -1;
}
Python
def search(nums, target):
    left, right = 0, len(nums) - 1
    while left <= right:
        mid = left + (right - left) // 2
        if nums[mid] == target:
            return mid
        elif nums[mid] < target:
            left = mid + 1
        else:
            right = mid - 1
    return -1
Go
func search(nums []int, target int) int {
    left, right := 0, len(nums) - 1
    for left <= right {
        mid := left + (right - left) / 2
        if nums[mid] == target {
            return mid
        } else if nums[mid] < target {
            left = mid + 1
        } else {
            right = mid - 1
        }
    }
    return -1
}
JavaScript
function search(nums, target) {
    let left = 0, right = nums.length - 1;
    while (left <= right) {
        const mid = Math.floor(left + (right - left) / 2);
        if (nums[mid] === target) return mid;
        else if (nums[mid] < target) left = mid + 1;
        else right = mid - 1;
    }
    return -1;
}

相关文章:

  • 深入解析 I²C 与 SPI 协议:原理、时序及软件实现
  • Git强制覆盖分支:将任意分支完全恢复为main分支内容
  • IO进程线程
  • 2025华为OD机试真题目录【E卷+A卷+B卷+C卷+D卷】持续收录中...
  • 基于RK3588的重症监护信息系统应用解决方案
  • 深拷贝与浅拷贝
  • 微服务,服务治理nacos,负载均衡LOadBalancer,OpenFeign
  • Leetcode 662: 二叉树最大宽度
  • 大白话跨域问题的原理与多种解决方法的实现
  • 信息学奥赛一本通1009
  • el-table input textarea 文本域 自适应高度,切换分页滚动失效处理办法
  • 【Linux实践系列】:用c语言实现一个shell外壳程序
  • HTML + CSS 题目
  • C语言基础知识02
  • 安防监控/视频集中存储EasyCVR视频汇聚平台如何配置AI智能分析平台的接入?
  • 分布式锁—2.Redisson的可重入锁二
  • CSS - 妙用Sass
  • 字符串--子串匹配
  • Linux进程状态
  • BUUCTF [BJDCTF2020]EasySearch1
  • 北约年度报告渲染所谓“中国核威胁”,国防部回应
  • 诺和诺德一季度减重版司美格鲁肽收入增83%,美国市场竞争激烈下调全年业绩预期
  • 鸿蒙概念股强势上涨,鸿蒙电脑本月正式发布,生态链即将补全
  • 实探北京楼市:“好房子”卖点十足,二手房持续回稳
  • 夹缝中的责编看行业:长视频之殇,漫长周期
  • 厦大历史系教授林汀水辞世,曾参编《中国历史地图集》