704.二分查找(力扣LeetCode)

704.二分查找(力扣LeetCode)

给定一个 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

提示:

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

解题思路为二分算法,如果对二分算法不了解的可以看我这篇博客:二分算法(整数二分、浮点数二分)

cpp 复制代码
class Solution {
public:
    int search(vector<int>& nums, int target) {
        // 初始化左右指针
        int l = 0, r = nums.size() - 1;
        
        // 当左指针小于右指针时,执行循环
        while (l < r)
        {
            // 计算中间索引,这里使用位运算来求平均值
            int mid = l + r >> 1;
            
            // 如果中间的数大于等于目标值,则目标值在左半边,更新右指针
            if (nums[mid] >= target) r = mid;
            // 如果中间的数小于目标值,则目标值在右半边,更新左指针
            else l = mid + 1;
        }
        
        // 循环结束后,左指针会指向目标值或者是第一个大于目标值的元素
        // 检查左指针是否指向目标值
        if (nums[l] == target) return l;
        // 如果不是,则表示数组中没有目标值,返回-1
        else return -1;
    }
};
相关推荐
程序猿小柒39 分钟前
leetcode hot100【LeetCode 4.寻找两个正序数组的中位数】java实现
java·算法·leetcode
雨中rain1 小时前
贪心算法(1)
算法·贪心算法
不爱学习的YY酱1 小时前
【操作系统不挂科】<CPU调度(13)>选择题(带答案与解析)
java·linux·前端·算法·操作系统
平头哥在等你1 小时前
求一个3*3矩阵对角线元素之和
c语言·算法·矩阵
飞滕人生TYF1 小时前
动态规划 详解
算法·动态规划
_OLi_2 小时前
力扣 LeetCode 106. 从中序与后序遍历序列构造二叉树(Day9:二叉树)
数据结构·算法·leetcode
ahadee2 小时前
蓝桥杯每日真题 - 第18天
c语言·vscode·算法·蓝桥杯
我明天再来学Web渗透2 小时前
【SQL50】day 2
开发语言·数据结构·leetcode·面试
地平线开发者3 小时前
CPU& 内存加压工具 stress-ng 介绍
算法·自动驾驶
XY.散人3 小时前
初识算法 · 分治(2)
算法