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

news2025/7/24 2:40:14

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

题目链接

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

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

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

示例 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 <= 1 0 5 10^5 105
− 1 0 9 -10^9 109 <= nums[i] <= 1 0 9 10^9 109
nums 是一个非递减数组
− 1 0 9 -10^9 109 <= target <= 1 0 9 10^9 109

解题思路

  • 二分算法
  • 本题需要对传统的二分算法进行魔改
  • 改动之处主要在于当nums[mid]==target时,如何处理。
    • 当我们查找左边界时,令r=mid-1即可。
    • 当我们查找右边界时,令l=mid+1即可。
    • 此外还要开一个变量x记录mid的位置,返回结果时候需要用到。
  • 细节见代码,代码也不多。

解题代码

在这里插入图片描述

#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:
    vector<int>ans;

    vector<int> searchRange(vector<int>& nums, int target) {
        int l=0;
        int r=nums.size()-1;
        int l1=-1;
        while(l<=r){
            int m = (l+r)>>1;
            if(nums[m]<target)l=m+1;
            if(nums[m]>target)r=m-1;
            if(nums[m]==target){
                r=m-1;
                l1=m;
            }
        }

        l=0;
        r=nums.size()-1;
        int r1=-1;
        while(l<=r){
            int m = (l+r)>>1;
            if(nums[m]<target)l=m+1;
            if(nums[m]>target)r=m-1;
            if(nums[m]==target){
                l=m+1;
                r1=m;
            }
        }
        ans.push_back(l1);
        ans.push_back(r1);
        return ans;
    }
};
int main(){
    vector<int>nums = {1,2,2};
    int target = 1;
    Solution so = Solution();
    so.searchRange(nums,target);
    return 0;
}

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

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

相关文章

2022 年 10 月 NFT 报告

Sept. 13, 2022, Daniel Data Source: October 2022 NFT Report (ENG) 10 月对于区块链来说是一个相对沉闷的月份&#xff0c;没有巨大的市场波动、项目启动或融资轮次。 由于宏观环境依然严峻&#xff0c;NFT 市场自夏末以来继续停滞不前。 从上个月的报告开始&#xff0c;F…

精准配置无线接入点发射功率

目录 1、为什么需要调节无线接入点的发射功率 2、无线接入点发送功率配置原则 2.1 802.11管理帧发射功率对接入行为影响 2.2 802.11数据帧发射功率对接入质量的影响 2.3 802.11管理帧、数据帧发射功率协调原则 1、数据帧发射功率务必大于等于管理帧发射功率 2、高频射频…

DOX-Poloxamer/DBCO-PEG-DOX 阿霉素修饰泊洛沙姆/二苯基环辛-聚乙二醇-阿霉素的探究

小编这里分享了DOX-Poloxamer/DBCO-PEG-DOX 阿霉素修饰泊洛沙姆/二苯基环辛-聚乙二醇-阿霉素的探究&#xff0c;和小编一起来看&#xff01; DBCO&#xff08;二苯并环辛炔&#xff09;是一种环炔烃&#xff0c;可以通过在水溶液中通过应变促进的1,3-偶极环加成反应与叠氮化物反…

【毕业设计】机器视觉答题卡识别系统 - python 深度学习

文章目录1 简介2 什么是机器视觉3 实现步骤4 最后1 简介 &#x1f525; Hi&#xff0c;大家好&#xff0c;这里是丹成学长的毕设系列文章&#xff01; &#x1f525; 对毕设有任何疑问都可以问学长哦! 这两年开始&#xff0c;各个学校对毕设的要求越来越高&#xff0c;难度也…

Cy7-NH2/amine氨基修饰荧光染料

伯胺基(primary amine)是生物标记反应中常用的基团。蛋白表面赖氨酸侧链(residue)官能团就是伯氨基,伯胺基可以和NHS活化酯(N-羟基琥珀酰亚胺酯,N-hydroxysuccinimide ester,succinimidyl ester),异氰酸酯(-NCS,isothiocyanate)或其它活化基团反应生成稳定链接,从而把Cy7分子连…

标志寄存器

标志寄存器 文章目录标志寄存器1.标志寄存器概念1.1 零标志位(ZF)1.2 奇偶标志位(PF)1.3 符号标志符(SF)1.4 进位标志符(CF)1.5溢出标志符(OF)2.adc指令和sbb指令3.cmp指令4.检测比较结果的条件转移指令5.DF标志和串传送指令6.pushf和popf1.标志寄存器概念 CPU内部的寄存器中&a…

UG NX 12装配——组件位置:装配约束

利用装配约束在装配中定位组件。 选择【装配】【组件】【装配约束】命令&#xff0c;或单击【装配】工具条上的【装配约束】按钮出现【装配约束】对话框。 &#xff08;1&#xff09;接触对齐 接触对齐约束可约束两个组件&#xff0c;使其彼此接触或对齐。这是最常用的约束。…

m无线通信信道matlab仿真,包括自由空间损耗模型,Okumura-Hata模型,COST231 Hata模型,SUI信道模型

目录 1.算法概述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法概述 无线信道是移动通信的传输媒体&#xff0c;所有的信息都在这个信道中传输。信道性能的好坏直接决定着人们通信的质量&#xff0c;因此要想在有限的频谱资源上尽可能地高质量、大容量传输…

2022关键之年,国产奶粉「争霸之秋」

奶粉又到关键年。 在中国奶粉的发展历程中&#xff0c;有两个关键性的时间节点&#xff1a;2008年&#xff0c;三鹿事件打乱了国产奶粉的发展节奏&#xff0c;洋奶粉开始大行其道&#xff1b;2016年&#xff0c;婴配粉注册制实行&#xff0c;打着“更适合中国宝宝体质”旗号的…

数据库系统工程师难考吗?

数据库系统工程师属于软考中级科目&#xff0c;只要你多看书多做练习&#xff0c;熟悉考试题型&#xff0c;用对学习方法&#xff0c;并不难考的。但是你专业不对口&#xff0c;应该在备考上多下功夫&#xff0c;建议把考试大纲里的内容复习一遍&#xff0c;掌握好考纲里的知识…

使用android 提取小米手机日志

如何使用android sdk获取小米日志 下载android sdk 登录网址https://www.androiddevtools.cn/ 往下滑找到SDK tools,下载zip包并解压到电脑随便一个位置 解压缩位置打开SDK Manager.exe&#xff0c;安装相关工具&#xff08;具体可以网络搜索&#xff09; 打开电脑cmd 使用a…

世界杯听腾格尔《遥远的地方》,可以多帮助你爱的球队多进几个球

世界杯又到来啦&#xff0c;球迷朋友笑哈哈&#xff0c;听着音乐看球赛&#xff0c;球迷朋友乐开怀。——世界杯&#xff0c;中国球迷欢迎你&#xff01;随着2022年11月20号的临近&#xff0c;卡特尔世界杯即将打响&#xff0c;每一位中国球迷都为之热血沸腾。 虽然说中国的足球…

ly-tab插件动态更改高度进行多端适配

在开发移动端用ly-tab时遇到的一个小问题&#xff0c;众所周知当我们使用rem配合flexible.js时元素的高度会根据不同的设配进行自动适配&#xff0c;但是ly-tab插件的高度默认使用px为单位&#xff0c;就会导致在不同的设备中出现我们不可控的因素 比如当我们想将其定位到顶部…

[附源码]java毕业设计农产品溯源管理

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

[附源码]java毕业设计农村留守儿童援助信息系统论文2022

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

普乐蛙大型VR模拟航空体验馆vr飞船体验馆vr航天科普馆定制

普乐蛙VR科普基地&#xff0c;拥有展示VR科普体验的设备多台&#xff0c;向观众科普及现代高科技全沉浸式虚拟现实&#xff08;VR&#xff09;技术应用&#xff0c;同时通过360度全沉浸式VR动感仿真设备体验防风防震、火灾逃生、交通安全等科普常识、寓教于乐&#xff0c;其乐无…

YOLOv5实操——检测是否戴口罩

文章目录数据集和代码的准备yolov5源码下载数据集的下载制作个人数据集数据集标注json 转 txt训练阶段模型训练可视化测试阶段数据集和代码的准备 yolov5源码下载 yolov5官方下载地址 数据集的下载 直接下载别人制作好的数据集 Mask Wearing Dataset 下载 然后将其放入与yo…

模型压缩算法库 MMRazor 全面升级,更灵活、更自动

MMRazor 是 OpenMMLab 开源项目里模型压缩领域的算法工具箱&#xff0c;目前支持了知识蒸馏、模型通道剪枝和模型结构搜索&#xff0c;模型量化部分正在开发中。 量化设计 RFC&#xff08;request for comment&#xff09;链接也放在这啦&#xff0c;欢迎各位小伙伴去提需求和建…

分享一个超好看回忆相册(代码自取)

目录 前言 正文 部分代码 单面截图 更改文档标题 更改图片 更改文字 源码 前言 Calabash Brothers 《葫芦兄弟》&#xff08;又名&#xff1a;葫芦娃&#xff09;&#xff0c;是上海美术电影制片厂于1985-1987年原创出品的13集系列剪纸动画片&#xff0c;是中国动画第…

python基于PHP+MySQL家政管理系统的设计与实现

随着大家生活水平的提高,在生活中家政服务变得越来越受大家的欢迎,如何来选择一个好的员工就也变得越来越重要,如何让人们足不出户就能找到自己满意的家政人员是本网站要解决的主要问题,我们建立一个家政公司信息系统来实现需求者从网站中快速的获取正确真实的家政服务信息的手…