当前位置: 首页 > article >正文

算法宝典——二分查找算法

1.认识二分查找

二分查找的时间复杂度:O(logN) 

二分查找属于算法中耳熟能详的一类,通常的我们会说只有数组有序才可以使用二分查找,不过这种说法并不完全正确,只要数据具有"二段性"就可以使用二分查找,即我们可以找出一种规律将数据分为两部分,然后以此类推处理整个数据即可

二分查找有三种模版:1.朴素二分查找 2.查找左边界的二分查找 3.查找右边界的二分查找

我们这里首先介绍最简单的朴素二分查找,通常朴素二分查找的模版如下 

int left = 0,right = nums.size() - 1;
while(left <= right)
{
     int mid = left + (right - left) / 2;//防止数据溢出
     if(......)
     {
           right = mid - 1;
     }
     else if(......)
     {
           left = mid + 1;
     }
     else
     {
           return ......;
     }
}
    

2.实战练习

题目来源:704.二分查找——力扣 

这里的数组默认有序,所以这里的"二段性"是将数组分为比target大和比target小两个区间,然后逐区间处理即可 

class Solution {
public:
    int search(vector<int>& nums, int target) 
    {
        int left = 0,right = nums.size() - 1;
        while(left <= right)
        {
            int mid = left + (right - left) / 2;//防止数据溢出
            if(target < nums[mid])
            {
                right = mid - 1;
            }
            else if(target > nums[mid])
            {
                left = mid + 1;
            }
            else
            {
                return mid;
            }
        }
        return -1;
    }
};

 


http://www.kler.cn/a/329432.html

相关文章:

  • 奉加微PHY6230兼容性:部分手机不兼容
  • Go-知识 版本演进
  • C/C++内存管理(超详解)
  • 图像去雾数据集的下载和预处理操作
  • 算法(蓝桥杯)贪心算法5——删数问题的解题思路
  • 以租赁合同的例子讲清楚 开源协议原理和区别
  • RabbitMQ的相关题
  • 每日一练:杨辉三角
  • 32、Qt读写csv文件
  • 压力测试指南-压力测试基础入门
  • HashMap为什么线程不安全?如何实现线程安全
  • Ubuntu20.04 安装汉语拼音后重启登入黑屏
  • wireshark抓包工具
  • FFmpeg开发笔记(五十八)把32位采样的MP3转换为16位的PCM音频
  • C#里使用protobuf的简单的例子
  • centos7-zabbix安装与使用(较全的配置)
  • 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-30
  • Excel实现省-市-区/县级联
  • 八大排序详解
  • 【Java 类与对象】多态
  • 【微服务】组件、基础工程构建(day2)
  • MQ基础:RabbitMQ真面目
  • 学习记录:js算法(四十九):二叉树的层序遍历
  • 【AI大模型】深入Transformer架构:编码器部分的实现与解析(上)
  • JavaScript爬虫:数据抓取的艺术与实践
  • 【北京迅为】《STM32MP157开发板嵌入式开发指南》- 第十三章 Linux连接档概念