LeetCode每日一题之二分搜索

news2024/11/18 12:43:20

文章目录

    • 1.关于二分搜索常见的误区
    • 2.左闭右闭区间的写法
    • 3.左闭右开区间的写法
    • 4.找到第一个大于target的数
    • 5.找到第一个小于target的数
    • 6.找到第一个大于等于taregt的数
    • 7.找到第一个小于等于target的数

1.关于二分搜索常见的误区

区间的定义:
在这里插入图片描述

2.左闭右闭区间的写法

class Solution {
public:
    int search(vector<int>& nums, int target)
    {
        int left = 0;
        int right = nums.size() - 1; //因为包含了右区间,所以需要减一
        while (left <= right)  //左闭右闭[1,1],合法,所以left可以等于right
        {
            int mid = (left + right) / 2;
            if (target < nums[mid])
            {
                right = mid - 1; //中间值已经不是target了
            }
            else if (target >nums[mid])
            {
                left = mid + 1;  
            }
            else return mid;
        }
        return -1;
    }
private:
    
};

3.左闭右开区间的写法

class Solution {
public:
    int search(vector<int>& nums, int target)
    {
        int left = 0;
        int right = nums.size(); //因为不包含了右区间,右区间是开放的,所以不需要-1
        while (left < right)  //左闭右闭[1,1),不合法,所以left不等于right
        {
            int mid = (left + right) / 2;
            if (target < nums[mid])
            {
                right = mid ; //因为右区间不包含mid,所以right可以等于mid
            }
            else if (target > nums[mid])
            {
                left = mid + 1;
            }
            else return mid;
        }
        return -1;
    }
private:

};

4.找到第一个大于target的数

class Solution {
public:
    int search(vector<int>& nums, int target)
    {
        int left = 0;
        int right = nums.size() - 1; //因为包含了右区间,所以需要减一
        while (left <= right)  //左闭右闭[1,1],合法,所以left可以等于right
        {
            int mid = (left + right) / 2;
            if (target >=nums[mid])
            {
                left = mid + 1;   
            }
            else
            {
                right = mid - 1; //中间值已经不是target了
            }
        }
        return left;
    }
private:  
};

5.找到第一个小于target的数

int search(vector<int>& nums, int target)
    {
        int left = 0;
        int right = nums.size() - 1; //因为包含了右区间,所以需要减一
        while (left <= right)  //左闭右闭[1,1],合法,所以left可以等于right
        {
            int mid = (left + right) / 2;
            if (target <=nums[mid])
            {
                right = mid - 1; //中间值已经不是target了
            }
            else
            {
                left = mid + 1;   
            }
        }
        return right;
    }

6.找到第一个大于等于taregt的数

 class Solution {
public:
    int search(vector<int>& nums, int target)
    {
        int left = 0;
        int right = nums.size() - 1; //因为包含了右区间,所以需要减一
        while (left <= right)  //左闭右闭[1,1],合法,所以left可以等于right
        {
            int mid = (left + right) / 2; 
            if (target >nums[mid])
            {
                left = mid + 1;   
            }
             else 
            {
                right = mid - 1; //中间值已经不是target了
            }
        }
        return left;
    }
private:  
};

7.找到第一个小于等于target的数

int search(vector<int>& nums, int target)
    {
        int left = 0;
        int right = nums.size() - 1; //因为包含了右区间,所以需要减一
        while (left <= right)  //左闭右闭[1,1],合法,所以left可以等于right
        {
            int mid = (left + right) / 2;
            if (target <nums[mid])
            {
                right = mid - 1; //中间值已经不是target了
            }
            else
            {
                left = mid + 1;   
            }
        }
        return right;
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/541878.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(MIT6.045)自动机、可计算性和复杂性-正则表达式

语言(language)的计算性质&#xff1a;交、并、补、反转、拼接、星号&#xff08;*&#xff09; 星号是一元运算符&#xff0c;表示一个语言和自己的有穷次笛卡尔积。 回顾&#xff1a;正则语言&#xff08;Regular Language&#xff09;指可以用DFA描述的语言。 正则表达式…

Linux内核panic简析

源码基于&#xff1a;Linux 5.4 0. 前言 内核异常的级别大致分为三个&#xff1a;BUG、oops、panic。 BUG 是指那些不符合内核的正常设计&#xff0c;但内核能够检测出来并且对系统运行不会产生影响的问题&#xff0c;比如在原子上下文中休眠&#xff0c;在内核中用 BUG 标识。…

Linux——线程3|线程互斥和同步

加锁保护 我们上一篇提到过,多个线程执行下面代码可能会出错,具体原因可查看上一篇Linux博客。

Vue3相关知识点笔记(持续更新中。。。。)

目录标题 1、Vue3中的组合式Api有哪些? 和Vue2的Options Api有什么不同?Vue3中的组合式API主要包括以下几个&#xff1a;与Vue2的option Api有什么不同 2、Vue3.0的设计目标是什么&#xff1f;做了哪些优化&#xff1f;设计目标是什么&#xff1f;哪些优化&#xff1f; 3、Vu…

python:随机森林分类器的性能评估(决策树数量的影响)

作者:CSDN @ _养乐多_ 随机森林(Random Forest)是一种强大的机器学习算法,常用于分类和回归任务。它由多个决策树构成,通过集成学习的方式进行预测。在本篇博客中,我们将探讨随机森林分类器在不同决策树数量下的性能,并绘制相应的图表进行可视化分析。OOB误差,0被误判为…

C++ 实现堆排序

时空复杂度 时间复杂度 排序复杂度 O ( n l o g n ) O(nlogn) O(nlogn) 建堆复杂度 O ( n ) O(n) O(n) 空间复杂度 由于堆排序是一种就地设计的排序算法&#xff0c;空间需求是恒定的&#xff0c;所以是O(1) 稳定性 不稳定。 C代码&#xff08;大根堆&#xff09; cla…

Jenkins持续集成之修改jenkins工作目录

修改jenkins工作目录 一般不建议把工作目录放到默认的C盘&#xff0c;故可以更改到其他盘中 前置条件&#xff1a;先在其他盘中新建工作目录的文件&#xff1b;如下图 1、首先打开任务管理器&#xff0c;找到服务中的Jenkins进程 2、右击点击转到详细信息&#xff1b; 3、再右…

洛谷P1706全排列问题题解(两种方法+详解)

问题引出 全排列问题 题目描述 按照字典序输出自然数 1 1 1 到 n n n 所有不重复的排列&#xff0c;即 n n n 的全排列&#xff0c;要求所产生的任一数字序列中不允许出现重复的数字。 输入格式 一个整数 n n n。 输出格式 由 1 ∼ n 1 \sim n 1∼n 组成的所有不重…

成为Jmeter大师:从入门到精通的环境搭建教程

一、JMeter 介绍 Apache JMeter是100%纯JAVA桌面应用程序&#xff0c;被设计为用于测试客户端/服务端结构的软件(例如web应用程序)。它可以用来测试静态和动态资源的性能&#xff0c;例如&#xff1a;静态文件&#xff0c;Java Servlet,CGI Scripts,Java Object,数据库和FTP服…

什么是 http 代理,为什么需要 http 代理?

前言&#xff1a; 在我们进行软件测试工作的时候&#xff0c;会有很多地方需要去设置代理的。 比如&#xff1a;fiddler抓包&#xff0c;jmeter录制脚本等等。 甚至于&#xff0c;在某些公司&#xff0c;去访问某些内部网址的时候&#xff0c;都需要通过连接vpn才能成功访问。…

Meaning of life :Do not wait too long and miss the opportunity

生命的意义在于机会在眼前&#xff0c;我们就要去抓住他&#xff0c;错过了可能会遗憾终身&#xff0c;不要去等待机会的到来&#xff0c;很多时候真是应一句老话, "机不可失时不再来!" 。 Dont wait too long and miss the opportunity Each spring brings a blos…

瑞吉外卖 - 修改菜品功能(18)

某马瑞吉外卖单体架构项目完整开发文档&#xff0c;基于 Spring Boot 2.7.11 JDK 11。预计 5 月 20 日前更新完成&#xff0c;有需要的胖友记得一键三连&#xff0c;关注主页 “瑞吉外卖” 专栏获取最新文章。 相关资料&#xff1a;https://pan.baidu.com/s/1rO1Vytcp67mcw-PD…

Flink第四章:水位线和窗口

系列文章目录 Flink第一章:环境搭建 Flink第二章:基本操作. Flink第三章:基本操作(二) Flink第四章:水位线和窗口 文章目录 系列文章目录前言一、水位线二、窗口二、实际案例1.自定义聚合函数2.全窗口函数3.水位线窗口4.统计用户点击数据5.处理迟到数据 总结 前言 这次博客记…

ChatGPT、GPT4、AutoGPT 和 MemoryGPT:初学者指南

人工智能 (AI) 不仅在改变行业&#xff0c;也在改变我们的日常生活。借助人工智能&#xff0c;我们可以改善我们的组织和生产力&#xff0c;让我们能够专注于真正重要的事情。在本文中&#xff0c;我们将探讨一些适用于日常生活的 AI 工具&#xff0c;以及它们如何帮助您保持井…

【Spring框架】--02.容器IoC、原理(手写IoC)

文章目录 3.容器&#xff1a;IoC3.1 IoC容器3.1.1 控制反转&#xff08;IoC&#xff09;3.1.2 依赖注入3.1.3 IoC容器在Spring的实现 3.2 基于XML管理Bean3.2.1搭建子模块spring6-ioc-xml3.2.2 获取bean①方式一&#xff1a;根据id获取②方式二&#xff1a;根据类型获取③方式三…

【Jmeter第三章】Jmeter给请求添加请求头

给请求加上请求头最常见的场景就是在请求头上添加token了&#xff0c;这里也拿添加token来举例 1、添加某个请求的请求头 1、选中HTTP请求&#xff0c;右键添加 2、添加请求头 2、添加公共的请求头信息 其实步骤和上面是一样的&#xff0c;只不过是选择&#xff1a;线程组…

极客的git常用命令手册

极客的git常用命令手册 1.1 权限配置篇1.1.1 创建ssh key1.1.2 本地存在多个密钥时&#xff0c;如何根据目标平台自动选择用于认证的密钥&#xff1f; 1.2 基础信息配置篇1.2.1 配置用户名1.2.2 配置用户邮箱1.2.3 设置文件名大小写区分1.2.4 设置命令行显示颜色1.2.5 检查git全…

MySQL高级_第11章_数据库的设计规范

MySQL高级_第11章_数据库的设计规范 1. 为什么需要数据库设计 2. 范 式 2.1 范式简介 在关系型数据库中&#xff0c;关于数据表设计的基本原则、规则就称为范式。 可以理解为&#xff0c;一张数据表的设计结构需要满足的某种设计标准的 级别 。要想设计一个结构合理的关…

如何用postman进行http接口测试?好好看好好学

目录 优点&#xff1a; 1、什么是POSTMAN 2、新建一个项目 2、新增一个用例 3、添加请求信息 4、post请求参数 5、添加头信息 6、预处理和结果检查 7、全局变量与环境变量 8、导出用例为代码 9、批量执行用例 HTTP的接口测试工具有很多&#xff0c;可以进行http请求…

打死都千万不要进外包...

我18年毕业于一个普通二本学校&#xff0c;是一个很不出名的小本科。大学期间专业知识也没有去认真的学习&#xff0c;所以毕业的时候就随便找了一份工作&#xff0c;在一个小公司做功能测试。 记得那时候薪资大概是6k左右&#xff0c;因为是在工厂&#xff0c;工作环境很差&a…