【算法|二分查找No.1】leetcode 704. 二分查找+二分模板 leetcode 34. 在排序数组中查找元素的第一个和最后一个位置

个人主页:兜里有颗棉花糖
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创
收录于专栏【手撕算法系列专栏】【LeetCode】
🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望对大家有所帮助
🍓希望我们一起努力、成长,共同进步。

原题链接:点击直接跳转到该题目

目录

  • 一、leetcode 704. 二分查找解题代码
    • 二分查找模板总结
  • 二、leetcode 34. 在排序数组中查找元素的第一个和最后一个位置
    • 题目描述
    • 解题代码
    • 查找区间左右端点模板

一、leetcode 704. 二分查找解题代码

class Solution {
public:int search(vector<int>& nums, int target) {int n = nums.size();int l = 0,r = n - 1;while(l <= r){int mid = l + (r - l) / 2;if(nums[mid] > target) r = mid - 1;else if(nums[mid] < target) l = mid + 1;else return mid;}return -1;}
};

二分查找模板总结

// 当长度为奇数时,mid = l + (r - l) / 2 和 mid = l + (r - l + 1) / 2无区别
// 当长度为偶数时,mid = l + (r - l) / 2 是中间数中左边那个,mid = l + (r - l + 1) / 2是中间数中右边那个
while(l <= r)
{int mid = l + (r - l) / 2;if(......) r = mid - 1;else if(......) l = mid + 1;else return ......;
}

二、leetcode 34. 在排序数组中查找元素的第一个和最后一个位置

原题链接:点击直接跳转到该题目

题目描述

给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。

如果数组中不存在目标值 target,返回 [-1, -1]

你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。

示例1:

输入:nums = [5,7,7,8,8,10], target = 8
输出:[3,4]

示例2:

输入:nums = [5,7,7,8,8,10], target = 6
输出:[-1,-1]

示例3:

输入:nums = [], target = 0
输出:[-1,-1]

在这里插入图片描述

解题代码

class Solution {
public:vector<int> searchRange(vector<int>& nums, int target) {int n = nums.size();if(n == 0) return {-1,-1};int l = 0,r = n - 1;// 查找区间左端点while(l < r){int mid = l + (r - l) / 2;if(nums[mid] < target) l = mid + 1;else r = mid;}if(nums[l] != target) return {-1,-1};int begin = l;// 查找区间右端点r = n - 1;while(l < r){int mid = l + (r - l + 1) / 2;if(nums[mid] > target) r = mid - 1;else l = mid;}int end = r;return {begin,end};}
};

查找区间左右端点模板

在这里插入图片描述

在这里插入图片描述

// 查找左端点模板
while(l < r)
{int mid = l + (r - l) / 2;if(nums[mid] < target) l = mid + 1;else r = mid;
}// 查找右端点模板
while(l < r)
{int mid = l + (r - l + 1) / 2;if(nums[mid] > target) r = mid - 1;else l = mid;
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C/C++ static关键字详解(最全解析,static是什么,static如何使用,static的常考面试题)

目录 一、前言 二、static关键字是什么&#xff1f; 三、static关键字修饰的对象是什么&#xff1f; 四、C 语言中的 static &#x1f34e;static的C用法 &#x1f349;static的重点概念 &#x1f350;static修饰局部变量 &#x1f4a6;static在修饰局部变量和函数的作用 &a…

【k8s】pod集群调度

调度约束 Kubernetes 是通过 List-Watch **** 的机制进行每个组件的协作&#xff0c;保持数据同步的&#xff0c;每个组件之间的设计实现了解耦。 用户是通过 kubectl 根据配置文件&#xff0c;向 APIServer 发送命令&#xff0c;在 Node 节点上面建立 Pod 和 Container。…

[SSD综述1.7] SSD接口形态: SATA、M.2、U.2、PCIe、BGA

依公知及经验整理,原创保护,禁止转载。 专栏 《SSD入门到精通系列》 <<<< 返回总目录 <<<< 前言 犹记得当年Windows 7系统体验指数中,那5.9分磁盘分数,在其余四项的7.9分面前,似乎已经告诉我们机械硬盘注定被时代淘汰。势如破竹的SSD固态硬盘,彻…

二维码智慧门牌管理系统升级:一键报错解决三大问题

文章目录 前言一、一键报错功能解决了三大问题二、提高效率和便捷性 前言 随着科技的不断发展&#xff0c;智能化管理已经深入到社会的各个角落&#xff0c;其中二维码智慧门牌管理系统在社区、酒店、写字楼等场所的应用尤为广泛。为了更好地提升管理系统效率和解决实际问题&a…

旋转图像[中等]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给定一个n n的二维矩阵matrix表示一个图像。请你将图像顺时针旋转90度。你必须在原地旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。 示例 1&#xff1a; 输入&#xff1a; matrix…

设计模式之装饰模式--优雅的增强

目录 概述什么是装饰模式为什么使用装饰模式关键角色基本代码应用场景 版本迭代版本一版本二版本三—装饰模式 装饰模式中的巧妙之处1、被装饰对象和装饰对象共享相同的接口或父类2、当调用装饰器类的装饰方法时&#xff0c;会先调用被装饰对象的同名方法3、子类方法与父类方法…

【深度学习基础】专业术语汇总(欠拟合和过拟合、泛化能力与迁移学习、调参和超参数、训练集、测试集和验证集)

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…

vue+asp.net Web api前后端分离项目发布部署

一、前后端项目介绍 1.前端项目是使用vue脚手架进行创建的。 脚手架版本&#xff1a;vue/cli 5.0.8 编译器版本&#xff1a;vs code 1.82.2 2.后端是一个asp.net Core Web API 项目 后端框架版本&#xff1a;.NET 6.0 编译器版本&#xff1a;vs 2022 二、发布部署步骤 第…

Java基础篇 | 多线程详解

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; Java从入门到精通 ✨特色专栏&#xf…

网络工程师进阶课:华为HCIP认证课程介绍

微思网络HCIP VIP试听课程&#xff1a;DHCP协议原理与配置https://www.bilibili.com/video/BV1cy4y1J7yg/?spm_id_from333.999.0.0 【赠送】IT技术视频教程&#xff0c;白拿不谢&#xff01;思科、华为、红帽、数据库、云计算等等 https://xmws-it.blog.csdn.net/article/det…

如何选择微信管理系统?

如何选择微信管理系统&#xff1f; 1、不用下载安装软件&#xff0c;不越狱不刷机 2、不绑定手机或电脑&#xff0c;不对电脑或手机做限制&#xff0c;也不受电脑、手机关闭、关机影响 3、能更新迭代&#xff0c;不限制版本 4、使用安全登录&#xff0c;保障账号安全的 5、不用…

LangChain+LLM实战---ChatGPT的工作原理

一个词一个词的输出 ChatGPT能够自动生成类似于人类书写的文本&#xff0c;这是非常了不起和出乎意料的。但它是如何做到的&#xff1f;为什么会有效果呢&#xff1f;我的目的在于大致概述ChatGPT内部发生了什么&#xff0c;然后探讨它为什么能够很好地生成我们认为有意义的文…

GEE数据集——原住民土地(原住民土地地图)数据集

原住民土地&#xff08;原住民土地地图&#xff09; 土地承认是人们在日常生活中融入原住民存在和土地权利意识的一种方式。这通常在仪式、讲座或教育指南开始时进行。它可以是一种明确但有限的方式来认识殖民主义和第一民族的历史以及定居者殖民社会变革的需要。在这种情况下…

2023.11.03 homework

小学4年级数学 1 2 3 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 19…

2023.11.2事件纪念

然而造化又常常为庸人设计,以时间的流逝,来洗涤旧迹,仅以留下淡红的血色和微漠的悲哀。 回顾这次事件&#xff0c;最深的感触就是什么是团队的力量&#xff01; 当我们看到希望快要成功的时候&#xff0c;大家洋溢出兴奋开心的表情&#xff0c;一起的欢声笑语&#xff1b;但看…

CleanMyMacX4.16破解版激活码

CleanMyMac X是一款颇受欢迎的专业清理软件&#xff0c;拥有十多项强大的功能&#xff0c;可以进行系统清理、清空废纸篓、清除大旧型文件、程序卸载、除恶意软件、系统维护等等&#xff0c;并且这款清理软件操作简易&#xff0c;非常好上手&#xff0c;特别适用于那些刚入手苹…

如何在 Unbuntu 下安装配置 Apache Zookeeper

简介 Zookeeper 是 apache 基金组织下的项目&#xff0c;项目用于简单的监控和管理一组服务&#xff0c;通过简单的接口就可以集中协调一组服务&#xff0c;如配置管理&#xff0c;信息同步&#xff0c;命名&#xff0c;分布式协调。 准备工作 Ubuntu 23.04 或者 20.04访问…

@Slf4j将日志记录到磁盘和数据库

文章目录 1、背景介绍2、存本地2.1、配置文件2.2、使用 3、存数据库3.1、配置文件改造3.2、过滤器编写3.3、表准备3.4、添加依赖3.5、测试 4、优化4.1、日志定期删除 1、背景介绍 现在我一个SpringBoot项目想记录日志&#xff0c;大概可以分为下面这几种&#xff1a; 用户操作…

NFC芯片MS520:非接触式读卡器 IC

MS520 是一款应用于 13.56MHz 非接触式通信中的高集成 度读写卡芯片。它集成了 13.56MHz 下所有类型的被动非接触 式通信方式和协议&#xff0c;支持 ISO14443A 的多层应用。 主要特点 ◼ 高度集成的解调和解码模拟电路 ◼ 采用少量外部器件&#xff0c;即可将输…

C++二分查找算法的应用:最小好进制

本文涉及的基础知识点 二分查找 题目 以字符串的形式给出 n , 以字符串的形式返回 n 的最小 好进制 。 如果 n 的 k(k>2) 进制数的所有数位全为1&#xff0c;则称 k(k>2) 是 n 的一个 好进制 。 示例 1&#xff1a; 输入&#xff1a;n “13” 输出&#xff1a;“3” …