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;
    }
};
相关推荐
灵感__idea3 小时前
Hello 算法:贪心的世界
前端·javascript·算法
ZK_H4 小时前
嵌入式c语言——关键字其6
c语言·开发语言·计算机网络·面试·职场和发展
澈2074 小时前
深入浅出C++滑动窗口算法:原理、实现与实战应用详解
数据结构·c++·算法
ambition202424 小时前
从暴力搜索到理论最优:一道任务调度问题的完整算法演进历程
c语言·数据结构·c++·算法·贪心算法·深度优先
cmpxr_5 小时前
【C】原码和补码以及环形坐标取模算法
c语言·开发语言·算法
qiqsevenqiqiqiqi5 小时前
前缀和差分
算法·图论
代码旅人ing5 小时前
链表算法刷题指南
数据结构·算法·链表
Yungoal5 小时前
常见 时间复杂度计算
c++·算法
6Hzlia5 小时前
【Hot 100 刷题计划】 LeetCode 48. 旋转图像 | C++ 矩阵变换题解
c++·leetcode·矩阵
不爱吃炸鸡柳6 小时前
单链表专题(完整代码版)
数据结构·算法·链表