C++二分查找

1.算法

1.1 什么是算法

算法是一种解决问题的方法,它并不是一个新的知识点,而是讲我们学习过的知识点运用起来解决问题。

1.2 算法的时间复杂度

时间复杂度指的是算法所要执行的次数,而不是时间,我们学习的每个算法都会告知时间复杂度,但是目前我们先不学习如何计算算法的时间复杂度,以后再说。

2.二分查找

2.1 704. 二分查找 - 力扣(LeetCode)

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

2.2 什么是二分查找

二分查找 是一种高效的、方便的、简单的查找数据的方式,二分查找一般 运用与有序序列中,这样才能进行二分查找。

2.3 二分查找的原理

我们先定义两个指针,分别指向数组的第一个和最后一个数的下标,我们在算出这两个指针之间的中间下标,定义为变量mid,如果mid的值比要查找的数大,那么就把右指针移动到mid-1的位置,如果小,就把左指针移动到mid+1的位置,如果相等,那么输出mid。

2.4 二分查找的模板

cpp 复制代码
while(left < right)
{
    int mid = (left + right) / 2;
    if(arr[mid] > target)
        right = mid - 1;
    else if(arr[mid] < target)
        left = mid + 1;
    else
    {
        cout << mid << endl;
        break;
    }
}

注:二分查找的时间复杂度为O(Logn)

2.5 参考答案

cpp 复制代码
class Solution {
public:
    int search(vector<int>& nums, int target) {
        int left = 0, right = nums.size() - 1;
        while(left <= right)
        {
            int mid = (left + right) / 2;
            if(nums[mid] == target)
                return mid;
            else if(nums[mid] > target)
                right = mid - 1;
            else
                left = mid + 1;
        }
        return -1;
    }
};

再见!

相关推荐
每次的天空1 分钟前
Android-重学kotlin(协程源码第一阶段)新学习总结
开发语言·学习·kotlin
Dovis(誓平步青云)4 分钟前
探索飞算 JavaAI 进阶:解锁高效Java开发的新维度
java·开发语言·飞算java
CS semi5 分钟前
C++每日刷题day2025.7.10
开发语言·c++
还听珊瑚海吗9 分钟前
Python(一)
开发语言·python
满分观察网友z12 分钟前
从UI噩梦到导航之梦:一道LeetCode经典题如何拯救了我的项目(116. 填充每个节点的下一个右侧节点指针)
算法
DoraBigHead1 小时前
小哆啦解题记——两数失踪事件
前端·算法·面试
不太可爱的大白1 小时前
Mysql分片:一致性哈希算法
数据库·mysql·算法·哈希算法
AI+程序员在路上1 小时前
Qt6中模态与非模态对话框区别
开发语言·c++·qt
Tiandaren5 小时前
Selenium 4 教程:自动化 WebDriver 管理与 Cookie 提取 || 用于解决chromedriver版本不匹配问题
selenium·测试工具·算法·自动化
nbsaas-boot6 小时前
Java 正则表达式白皮书:语法详解、工程实践与常用表达式库
开发语言·python·mysql