leetcode704.二分查找

题目描述:

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1

二分查找介绍:

二分查找是一种高效的查找算法,用于在有序数组中查找特定元素。它的基本思想是将查找区间不断缩小,每次将待查找区间缩小一半,直到找到目标元素或确定元素不存在。

二分查找的主要特点:

  1. 要求数组必须是有序的(通常是升序)。

  2. 时间复杂度为 O(log n),非常高效。

  3. 只适用于可以随机访问的数据结构(如数组)

  核心代码

func binarySearch(arr []int, target int) int {
    left := 0
    right := len(arr) - 1

    for left <= right {
        mid := left + (right-left)/2 // 避免整数溢出

        if arr[mid] == target {
            return mid // 找到目标元素,返回索引
        } else if arr[mid] < target {
            left = mid + 1 // 目标在右半部分
        } else {
            right = mid - 1 // 目标在左半部分
        }
    }

    return -1 // 未找到目标元素
}

工作原理:

1. 初始化左指针 `left` 为数组起始位置,右指针 `right` 为数组末尾位置。
2. 在 `left <= right` 的条件下进行循环:
   - 计算中间位置 `mid`。使用 `left + (right-left)/2` 而不是 `(left+right)/2` 可以避免整数溢出。
   - 如果中间元素等于目标值,返回该位置。
   - 如果中间元素小于目标值,将搜索范围缩小到右半部分。
   - 如果中间元素大于目标值,将搜索范围缩小到左半部分。
3. 如果循环结束还没找到目标元素,返回 -1 表示未找到。

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值