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

在排序数组中查找元素的一个位置和最后一个位置-力扣

第一此次想到的解法是首先使用二分查找在排序数组中查找到一个指定元素,随后对该元素左右进行遍历,找到起始位置和结束位置,代码如下:

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

执行虽然通过,但测试用时并不是很理想,在 代码随想录 看到的解法是将题目分为三种情况:

  • 情况一:target 在数组范围的右边或者左边,例如数组{3, 4, 5},target为2或者数组{3, 4, 5},target为6,此时应该返回{-1, -1}
  • 情况二:target 在数组范围中,且数组中不存在target,例如数组{3,6,7},target为5,此时应该返回{-1, -1}
  • 情况三:target 在数组范围中,且数组中存在target,例如数组{3,6,7},target为6,此时应该返回{1, 1}

采用二分法来分别寻找左边界和右边界,最终分情况进行return。代码如下:

class Solution {
public:vector<int> searchRange(vector<int>& nums, int target) {int leftBorder = getLeftBorder(nums, target);int rightBorder = getRightBorder(nums, target);// 情况一if (leftBorder == -2 || rightBorder == -2) return {-1, -1};// 情况三if (rightBorder - leftBorder > 1) return {leftBorder + 1, rightBorder - 1};// 情况二return {-1, -1};}
private:int getRightBorder(vector<int>& nums, int target) {int left = 0;int right = nums.size() - 1;int rightBorder = -2; // 记录一下rightBorder没有被赋值的情况while (left <= right) {int middle = left + ((right - left) / 2);if (nums[middle] > target) {right = middle - 1;} else { // 寻找右边界,nums[middle] == target的时候更新leftleft = middle + 1;rightBorder = left;}}return rightBorder;}int getLeftBorder(vector<int>& nums, int target) {int left = 0;int right = nums.size() - 1;int leftBorder = -2; // 记录一下leftBorder没有被赋值的情况while (left <= right) {int middle = left + ((right - left) / 2);if (nums[middle] >= target) { // 寻找左边界,nums[middle] == target的时候更新rightright = middle - 1;leftBorder = right;} else {left = middle + 1;}}return leftBorder;}
};

将上述代码的两个二分查找函数进行合并:

class Solution {
public:vector<int> searchRange(vector<int>& nums, int target) {int leftBorder = getBorder(nums, target, true);int rightBorder = getBorder(nums, target, false);// 情况一if (leftBorder == -2 || rightBorder == -2) return {-1, -1};// 情况三if (rightBorder - leftBorder > 1) return {leftBorder + 1, rightBorder - 1};// 情况二return {-1, -1};}
private:int getBorder(vector<int>& nums, int target, bool flag) {int left = 0;int right = nums.size() - 1;int border = -2;while (left <= right){int middle = left + (right - left)/2;if(flag) { //flag = true,返回左边界if (nums[middle] >= target) { // 寻找左边界,nums[middle] == target的时候更新rightright = middle - 1;border = right;} else {left = middle + 1;}}else{if (nums[middle] > target) {right = middle - 1;} else { // 寻找右边界,nums[middle] == target的时候更新leftleft = middle + 1;border = left;}}}return border;}};

相关文章:

在排序数组中查找元素的一个位置和最后一个位置-力扣

第一此次想到的解法是首先使用二分查找在排序数组中查找到一个指定元素&#xff0c;随后对该元素左右进行遍历&#xff0c;找到起始位置和结束位置&#xff0c;代码如下&#xff1a; class Solution { public:vector<int> searchRange(vector<int>& nums, int…...

系统分析师-案例分析-数据库

系统分析师-案例分析-数据库 更多软考资料 https://ruankao.blog.csdn.net/ 文章目录 系统分析师-案例分析-数据库数据库考察知识点规范化函数依赖范式1NF2NF3NF 规范化问题不规范化反规范化设计反规范化设计同步问题 并发控制性能优化完整性约束视图安全分布式数据库特点优点…...

【RabbitMQ】使用SpringAMQP的消息队列(Hello Word)和工作队列(Work Queue)

SpringAMQP SpringAMQP中文文档 Hello Word **案例1&#xff1a;**利用SpringAMQP实现HelloWord中的集成消息队列功能 项目结构&#xff0c;如图&#xff1a; 1.引入AMQP依赖&#xff08;父工程中&#xff09; <!--AMQP依赖&#xff0c;包含RabbitMQ--> <dependen…...

项目集成SkyWalking,基于k8s搭建

一、搭建SkyWalking 官方文档&#xff08;英文&#xff09;&#xff1a;skywalking/docs at master apache/skywalking 中文可以使用&#xff1a;GitHub - SkyAPM/document-cn-translation-of-skywalking: [已过期,请使用官网AI文档] The CN translation version of Apache…...

mysql-差异备份流程

4.差异备份流程 差异备份流程&#xff08;重要) 第一次完整备份 innobackupex /xtrabackup innobackupex --userroot --password123456 /xtrabackup2024-05-23_20-25-05 第一次完整备份 2024-05-23_20-40-55 第二次差异备份 2024-05-23_20-47-37 第三次差异备份再往数据库里面…...

基于动态规划算法的DNA序列比对函数,给出两条序列(v和w)的打分矩阵

一.什么是动态规划算法 1.1总体思想 动态规划算法与分治法类似&#xff0c;基本思想也是将待求解的问题分成若干个子问题 经过分解得到的子问题往往不是互相独立的&#xff0c;有些子问题被重复计算多次 如果能够保存已解决的子问题答案&#xff0c;在需要时再找出来已求得…...

Tailwind CSS快速入门

文章目录 初识安装Tailwindcss试用安装快速书写技巧扩展好处Todo 初识 只需书写 HTML 代码&#xff0c;无需书写 CSS&#xff0c;即可快速构建美观的网站 Tailwind CSS 是一个功能类优先的 CSS 框架&#xff0c;它通过提供大量的原子类&#xff08;utility classes&#xff09;…...

Postman使用技巧

Postman是一款广泛使用的API开发和测试工具&#xff0c;专为简化Web服务API的开发、测试、文档编制和协作过程而设计。它支持各种HTTP请求方法&#xff0c;包括GET、POST、PUT、DELETE等&#xff0c;允许用户轻松地构建和发送请求&#xff0c;以及检查响应。 本文介绍几个提升效…...

sqli-labs靶场

less---11 1.求闭合字符 输入1报错说明存在注入点 存在注入点 2.查库名 使用报错注入查库名 admin” and (select 1 from (select count(*),concat(database(),floor(rand(0)*2))x from information_schema.tables group by x)y)# //floor函数报错 3.查表名 admin and upd…...

基于springboot的大创管理系统

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了大创管理系统的开发全过程。通过分析大创管理系统管理的不足&#xff0c;创建了一个计算机管理大创管理系统的方案。文章介绍了大创管理系统的系统分析部分&…...

常用torch.nn

目录 一、torch.nn和torch.nn.functional二、nn.Linear三、nn.Embedding四、nn.Identity五、Pytorch非线性激活函数六、nn.Conv2d七、nn.Sequential八、nn.ModuleList九、torch.outer torch.cat 一、torch.nn和torch.nn.functional Pytorch中torch.nn和torch.nn.functional的区…...

力扣226.翻转二叉树101.对称二叉树

解决二叉树的问题&#xff0c;经常要习惯从递归角度思考 左子树/右子树是否具备某属性、是否属于什么类型&#xff08;和题目要求的判断当前树是否xxx一样&#xff09;&#xff1b; 对左/右子树进行什么操作&#xff08;和题目要求的对当前树的操作一样&#xff09;。 226.翻转…...

word如何按照原本页面审阅文档

1 视图-阅读视图 2 视图&#xff0c;自己看&#xff0c;懒得打字了哈哈...

前端基础入门三大核心之HTML篇:探索WebAssembly —— 开启网页高性能应用新时代

前端基础入门三大核心之HTML篇&#xff1a;探索WebAssembly —— 开启网页高性能应用新时代 WebAssembly基础概念工作原理概览WebAssembly实战示例基本使用 安全性与性能优化防范漏洞实践实际工作中的使用技巧结语与讨论 随着Web技术的飞速发展&#xff0c;前端开发者面临越来越…...

NDIS小端口驱动(四)

NDIS中断相关 1. 注册和取消注册中断&#xff1a; 微型端口驱动程序调用 NdisMRegisterInterruptEx 来注册中断。 驱动程序分配并初始化 NDIS_MINIPORT_INTERRUPT_CHARACTERISTICS 结构&#xff0c;以指定中断特征和函数入口点&#xff0c;驱动程序将结构传递给 NdisMRegister…...

用户态网络缓冲区设计

基于数组实现的环形缓冲区&#xff1a; 优点 使用固定大小的连续空间做用户态缓冲区&#xff0c;利用了内存访问的局部性&#xff0c;可以提高缓存命中率&#xff0c;提高程序性能&#xff0c;在处理大量数据时&#xff0c;缓存的利用率对性能有着很大的影响 正是基于性能的…...

Linux运维工程师基础面试题整理(三)

Linux运维工程师基础面试题整理(三) 1. 文件inode号有什么用?2. 文件的权限怎么设置与管理?3. 如何SSH免密配置?4. 如何快速部署一个web服务?5. 如何更新Linux系统内核?6. centos中如何配置本地yum源?7.Linux 防火墙如何简单配置?8. 有哪些工具可以批量管理Linux服务器…...

基于单片机与传感器技术的汽车起动线路设计

摘 要&#xff1a;在以发动机为动力源的汽车中&#xff0c;起动系统承担起使发动机由非工作状态进入工作状态的重要作用&#xff0c;属于发动机的附属系统。在传统汽车起动系统的基础上提出将单片机与传感器技术运用到起动控制线路中&#xff0c;通过传感器采集发动机工作状态信…...

C#如何通过反射获取外部dll的函数

在C#中&#xff0c;你可以使用反射&#xff08;Reflection&#xff09;来加载外部的DLL&#xff08;动态链接库&#xff09;并获取其中的函数&#xff08;在C#中通常称为方法&#xff09;。但是&#xff0c;请注意&#xff0c;反射主要用于访问类型信息&#xff0c;并且对于非托…...

从零开始傅里叶变换

从零开始傅里叶变换 1 Overview2 傅里叶级数2.1 基向量2.2 三角函数系表示 f ( t ) f(t) f(t)2.2.1 三角函数系的正交性2.2.2 三角函数系的系数 2.3 复指数函数系表示 f ( t ) f(t) f(t)2.3.1 复指数函数系的系数2.3.2 复指数函数系的正交性 2.4 傅里叶级数总结 3 傅里叶变换…...

2026年AI前20岗位薪酬出炉!搞AI大模型的远超同行?

AI相关&#xff0c;细分技术领域&#xff0c;薪资前20岗位&#xff0c;都有哪些。 今天这篇文章与铁铁们分享一下。 1 薪资榜单 如下图所示&#xff0c;排名第一&#xff1a;深度学习算法工程师&#xff0c;平均月薪达到3万1千&#xff1b; 排名第二的架构师&#xff0c;薪资与…...

ESP32上给LVGL做个‘懒加载’:分页与动态读取大文本的实战对比(附代码)

ESP32上LVGL大文本显示优化&#xff1a;分页加载与动态读取的深度对比与实践 在嵌入式设备上处理大文本显示一直是开发者面临的挑战之一。当我们在ESP32这样的资源受限平台上使用LVGL&#xff08;Light and Versatile Graphics Library&#xff09;显示超长文本时&#xff0c;如…...

如何快速掌握Windows系统权限管理:NSudo终极指南

如何快速掌握Windows系统权限管理&#xff1a;NSudo终极指南 【免费下载链接】NSudo [Deprecated, work in progress alternative: https://github.com/M2Team/NanaRun] Series of System Administration Tools 项目地址: https://gitcode.com/gh_mirrors/ns/NSudo 想要…...

基于智能体(Agent)的自动化图像工作流:Wan2.2-I2V-A14B与任务编排

基于智能体&#xff08;Agent&#xff09;的自动化图像工作流&#xff1a;Wan2.2-I2V-A14B与任务编排 1. 引言&#xff1a;当图像生成遇上智能体 想象一下这样的场景&#xff1a;你需要为电商平台制作一组节日主题的广告图&#xff0c;包含特定风格的背景、商品展示和人物互动…...

机器人手臂相机 vs 抓手相机:5个关键区别与选型指南(附避坑技巧)

机器人手臂相机 vs 抓手相机&#xff1a;5个关键区别与选型指南&#xff08;附避坑技巧&#xff09; 在工业自动化领域&#xff0c;视觉引导系统如同机器人的"眼睛"&#xff0c;而相机安装位置的选择往往决定了整个系统的精度与可靠性。当工程师面对手臂相机&#xf…...

vLLM-v0.17.1实操手册:SSH环境下vLLM服务日志实时分析与性能诊断

vLLM-v0.17.1实操手册&#xff1a;SSH环境下vLLM服务日志实时分析与性能诊断 1. vLLM框架简介 vLLM是一个专注于大语言模型(LLM)推理和服务的高性能开源库&#xff0c;由加州大学伯克利分校的天空计算实验室(Sky Computing Lab)发起&#xff0c;现已发展为社区驱动的项目。它…...

ABC系统实战指南:革新数字电路设计的逻辑综合与形式验证技术突破

ABC系统实战指南&#xff1a;革新数字电路设计的逻辑综合与形式验证技术突破 【免费下载链接】abc ABC: System for Sequential Logic Synthesis and Formal Verification 项目地址: https://gitcode.com/gh_mirrors/ab/abc 在现代集成电路设计流程中&#xff0c;工程师…...

从零开始学习C++ -- 基础知识

C入门基础1.C的第一个程序2.命名空间2.1 namespace的价值2.2 namespace的定义2.3命名空间使用3.C输入&输出4.缺省参数5.函数重载6.引用6.1引用的概念和定义6.2引用的特性6.3引用的使用6.4const引用6.5指针和引用的关系7.inline8.nullptr1.C的第一个程序 #include <iost…...

Iceoryx(冰羚):无锁队列与并发控制的设计与实现3(源码解析)

接上篇设计4: 索引管理层&#xff08; MpmcIndexQueue / CyclicIndex&#xff09;Subscriber存储数据使用的是queue&#xff0c;是为了保证数据的读取顺序。MpmcLockFreeQueue 为了满足多个进程同时写的情况&#xff0c;采用了索引数据分离的方案&#xff08;底层的索引实现为 …...

实战:利用大模型预测 2026 年最热门的‘长尾提问’并提前进行 GEO 占位

各位编程领域的同仁、技术爱好者&#xff0c;大家好&#xff01;今天&#xff0c;我们齐聚一堂&#xff0c;探讨一个既前沿又极具实战价值的议题&#xff1a;如何利用大模型&#xff08;Large Language Models, LLMs&#xff09;的强大能力&#xff0c;预测2026年可能成为热点的…...