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;
    }
};

再见!

相关推荐
行者9619 分钟前
Flutter跨平台开发在OpenHarmony上的评分组件实现与优化
开发语言·flutter·harmonyos·鸿蒙
阿蒙Amon29 分钟前
C#每日面试题-Array和ArrayList的区别
java·开发语言·c#
666HZ66641 分钟前
数据结构2.0 线性表
c语言·数据结构·算法
SmartRadio1 小时前
ESP32添加修改蓝牙名称和获取蓝牙连接状态的AT命令-完整UART BLE服务功能后的完整`main.c`代码
c语言·开发语言·c++·esp32·ble
且去填词1 小时前
Go 语言的“反叛”——为什么少即是多?
开发语言·后端·面试·go
知乎的哥廷根数学学派1 小时前
基于生成对抗U-Net混合架构的隧道衬砌缺陷地质雷达数据智能反演与成像方法(以模拟信号为例,Pytorch)
开发语言·人工智能·pytorch·python·深度学习·机器学习
实心儿儿1 小时前
Linux —— 基础开发工具5
linux·运维·算法
yeziyfx2 小时前
kotlin中 ?:的用法
android·开发语言·kotlin
charlie1145141912 小时前
嵌入式的现代C++教程——constexpr与设计技巧
开发语言·c++·笔记·单片机·学习·算法·嵌入式
古城小栈2 小时前
Rust 网络请求库:reqwest
开发语言·网络·rust