34.在排序数组中查找元素的第一个和最后一个位置(力扣LeetCode)

文章目录

  • 34.在排序数组中查找元素的第一个和最后一个位置
    • 题目描述
    • 二分

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]

提示:

  • 0 <= nums.length <= 105
  • -109 <= nums[i] <= 109
  • nums 是一个非递减数组
  • -109 <= target <= 109

二分

  这里有个坑,一个数组和vertor的坑,因为我平时习惯用数组,不会在意二分查找如果找不到的一个边界问题(数组开全局变量,初始化为零,并且我数组会开的很大,不会越界),但使用vector时一旦找不到会存在vector的访问越界

  • 以前使用数组时直接if(b[l] == a) return l;
int find1(int a)
{int l = 0, r = n - 1;while(l < r){int mid = l + r >> 1;if(b[mid] >= a) r = mid;else l = mid + 1;}if(b[l] == a) return l;return -1;
}
  • 现在使用vector需要判断是否越界if (r < 0) return -1;
int find1(vector<int>& nums, int n){int l=0,r=nums.size()-1;while(l<r){int mid=l+r>>1;if(nums[mid]>=n) r=mid;else             l=mid+1;}if (r < 0) return -1;if (nums[r] == n) return r;return -1;}
// 定义解决问题的类 Solution
class Solution {
public:// 主函数,用来查找目标值的开始和结束位置vector<int> searchRange(vector<int>& nums, int target) {// 初始化结果数组为 [-1, -1],表示目标值的开始和结束位置vector<int> num(2, -1);// 首先查找目标值的开始位置num[0] = find1(nums, target);// 如果开始位置为 -1,说明数组中没有目标值,直接返回 [-1, -1]if(num[0] == -1) return num;// 否则,查找目标值的结束位置else num[1] = find2(nums, target);// 返回包含开始和结束位置的数组return num;}private:// 辅助函数 find1,用于查找目标值的开始位置int find1(vector<int>& nums, int n) {// 初始化二分查找的左右边界int l = 0, r = nums.size() - 1;while(l < r) {// 查找左中位数,因为我们在查找开始位置int mid = (l + r) >> 1;// 如果中间值大于等于目标值 n,我们将右边界移动到 midif(nums[mid] >= n) r = mid;// 否则,将左边界移动到 mid + 1else l = mid + 1;}// 检查边界条件,确保 r 没有越界// 查找左边界时,r会一直逼近左边界,如果找不到r<0if (r < 0) return -1;// 如果 nums[r] 等于目标值 n,则 r 是开始位置if (nums[r] == n) return r;// 否则,说明数组中没有目标值,返回 -1return -1;}// 辅助函数 find2,用于查找目标值的结束位置int find2(vector<int>& nums, int n) {// 初始化二分查找的左右边界int l = 0, r = nums.size() - 1;while(l < r) {// 查找右中位数,因为我们在查找结束位置int mid = (l + r + 1) >> 1;// 如果中间值小于等于目标值 n,我们将左边界移动到 midif(nums[mid] <= n) l = mid;// 否则,将右边界移动到 mid - 1else r = mid - 1;}// 检查边界条件,确保 l 没有越界// 查找右边界时,l会一直逼近右边界,如果找不到l>nums.size()-1(l >= nums.size())if (l >= nums.size()) return -1;// 如果 nums[l] 等于目标值 n,则 l 是结束位置if (nums[l] == n) return l;// 否则,说明数组中没有目标值,返回 -1return -1;}
};

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

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

相关文章

将小游戏打包成单一exe文件的原理及应用

哈喽大家好&#xff0c;我是咕噜美乐蒂&#xff0c;很高兴又见面啦&#xff01;本文将介绍将小游戏原版文件打包成单一exe文件的原理&#xff0c;并探讨了这种打包方式的优点和应用场景。通过对打包工具和编译器的介绍&#xff0c;解释了它们如何将游戏的所有相关文件合并到一个…

Fiddler 过滤地址设置及导出JMeter脚本插件原理

Fiddler 过滤地址设置 1、在fiddler右边工具栏中找到Filters过滤器->勾选&#xff1a;Use Filters->在hosts中选择过滤规则和要过滤的地址。 如下图&#xff1a; 2、点击【Actions】按钮&#xff0c;选择&#xff1a;Run Filterset now&#xff0c;就会立即生效&#x…

nginx限制ip访问

先看一下被禁止的效果 如何配置 禁止访问的话直接在location模块增加类似如下配置 deny all; 完整示例 location / {deny all;root html;index index.html index.htm;} 默认是allow all就是允许所有ip访问,如果只配置指定ip可以访问是无效的,还是所有的ip可以访问 无效示例…

Unity动画桢事件

1&#xff0c;使用原因 在新项目内部审核的时候&#xff0c;说什么动画节奏不匹配&#xff0c;所以决定用动画桢事件来处理技能释放。当释放技能的时候&#xff0c;先播放技能动画&#xff0c;然后再动画桢所在的时间戳执行技能的逻辑。 2&#xff0c;具体实现 1&#xff0c;…

v3+ECharts 地图实现多个自定义图片的图标

备注&#xff1a;地图json, 图标图片 准备替换下 <template><div ref"mapEcharts" class"map-echart"></div> </template><script setup langts> import * as echarts from echarts import mapcity from "/tool/map/m…

【SpringBoot篇】springboot的自动装配原理

文章目录 &#x1f3f3;️‍&#x1f308;什么是自动装配&#x1f339;SpringBoot的自动装配&#x1f354;具体操作 &#x1f3f3;️‍&#x1f308;什么是自动装配 自动装配&#xff08;Auto-Configuration&#xff09;是Spring Boot框架的一个核心特性之一&#xff0c;它通过…

走进课本中的知名景区,猿辅导带你“读课文 游中国”

课本里&#xff0c;你能“看见”的世界不止一面&#xff0c;一座山川&#xff0c;崇高肃穆下孕育出千年的文明&#xff1b;一座桥梁&#xff0c;连接起时间的变迁和技术的传承&#xff1b;一座古楼&#xff0c;飞檐斗拱间凝聚着中国文化的精髓。近日&#xff0c;猿辅导素养课宣…

2024年新提出的算法:一种新的基于数学的优化算法——牛顿-拉夫森优化算法|Newton-Raphson-based optimizer,NRBO

1、简介 开发了一种新的元启发式算法——Newton-Raphson-Based优化器&#xff08;NRBO&#xff09;。NRBO受到Newton-Raphson方法的启发&#xff0c;它使用两个规则&#xff1a;Newton-Raphson搜索规则&#xff08;NRSR&#xff09;和Trap Avoidance算子&#xff08;TAO&#…

光电耦合隔离器在医疗行业的应用全面分析

光电耦合隔离器作为一种关键的电子元件&#xff0c;在医疗行业中扮演着重要的角色。光电耦合隔离器通过将电信号转换为光信号&#xff0c;并在隔离通道中传输&#xff0c;能够有效地隔离输入和输出端&#xff0c;保证医疗设备在电气上的安全性。 光电耦合隔离器的医疗应用领域 …

简述云原生基础定义及关键技术

云原生是什么 云原生是面向“云”而设计的应用,因此技术部分依赖于传统云计算的 3 层概念,基础设施即服务(IaaS)、平台即服务(PaaS)和软件即服务(SaaS)。 例如,敏捷的不可变基础设施交付类似于 IaaS,用来提供计算网络存储等基础资源,这些资源是可编程且不可变的,直…

【VBA代码解决方案】md文档转Word后,全自动转换为标准的Word公式格式

【VBA解决方案】全自动将Word中的文本公式转换为标准公式 写在最前面VBA代码全自动方法将md文档导出为word代码如何运行VBA代码注意事项 一些如何实现的回忆记录步骤解析手动将文本转换为Word公式代码逻辑步骤设想代码解析代码解释总结 其他背景介绍应用场景VBA脚本介绍如何使用…

C#中的HashSet

在C#中&#xff0c;HashSet是一种集合类型&#xff0c;它实现了哈希表的数据结构。HashSet用于存储一组唯一的对象&#xff0c;并提供高效的查找、插入和删除操作。 HashSet的主要特点如下&#xff1a; 唯一性&#xff1a;HashSet中的元素是唯一的&#xff0c;不允许重复的元素…

Adb windows脚本

#由于测试不太会用adb指令 所以自己写了一个adb的脚本&#xff0c;简化adb的使用 echo off set SAVE_DIRD:\screen if not exist "%SAVE_DIR%" ( mkdir "%SAVE_DIR%" echo %SAVE_DIR%创建成功 )set ADB_PATHD:\SDK\sdk\platform-tools\adb.exeif &quo…

【原创教程】轻松搞定川崎机器人调试

1、确定川崎机器人坐标系 机器人坐标系一般有以下四种&#xff1a;世界坐标&#xff08;大地坐标&#xff09;、基坐标、工具坐标、工件坐标。在前面的文章中&#xff0c;我们已经有所阐述&#xff0c;大家可以参考前面文章。 下面川崎以工具坐标系为例&#xff08;现场川崎机…

python二进制读取文件快速定位及半个中文字符问题处理

1. 打开文件快速定位读取的方法 在Python中&#xff0c;可以使用open()函数来打开文件。要快速定位到特定的字节位置并读取或写入内容&#xff0c;可以结合使用seek()方法。 下面是一个示例代码&#xff0c;展示了如何使用seek()方法在二进制模式下打开文件并快速定位到指定位…

4.Doris数据导入导出

导入 Doris支持多种数据源导入如S3 HDFS Kafka 本地文件 Binlog 等 官方文档 导入的原子性保证 Doris 的每一个导入作业&#xff0c;不论是使用 Broker Load 进行批量导入&#xff0c;还是使用 INSERT 语句进行单条导入&#xff0c;都是一个完整的事务操作。导入事务可以保证…

兰陵Ex导出(<c:improt>标签覆盖问题)

1.同一个页面单个导出 1.1 增加导出按钮 找到对应的页面&#xff0c;导出按钮增加在合适的位置&#xff0c;【count】关键字可调整排序。 <div style"display: inline-block; float:right;vertical-align: middle;"><ui:toolbar id"toolbarOperate&quo…

双面墨水屏电子桌牌:传统纸质桌牌的完美替代品

今天&#xff0c;中科慧显想要和大家分享的是&#xff0c;关于双面墨水屏电子桌牌在实际使用场景中的优势及好处。随着科技的快速发展&#xff0c;各种新型的电子办公产品不断涌现&#xff0c;其中双面墨水屏电子桌牌就是一种具有创新性的电子办公产品。相较于传统的纸质桌牌&a…

OpenCV图像的基本操作

图像的基本操作&#xff08;Python&#xff09; 素材图 P1&#xff1a;die.jpg P2&#xff1a;cool.jpg V&#xff1a;rabbit.mp4&#xff0c; 下载地址 读取展示-图像 import cv2img_1 cv2.imread(./die.jpg) # default cv2.IMREAD_COLOR print("die.jpg shape(imre…

2024年生物技术与医学科学国际学术研讨会(ISBAMS 2024)

2024年生物技术与医学科学国际学术研讨会&#xff08;ISBAMS 2024&#xff09; 重要信息 会议官网&#xff1a;http://www.isbams.com会议地址&#xff1a;上海召开日期&#xff1a;2024/2/20截稿日期&#xff1a;2024/2/10 &#xff08;先投稿&#xff0c;先审核&#xff0c;先…