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

力扣算法题:34、在排序数组中查找元素的第一个和最后一个位置.java版

版本说明

当前版本号[20230930]。

版本修改说明
20230930初版

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

思路

可以点击此篇博客看二分查找算法相关的图解:究竟是什么样的讲解二分查找算法的博客让我写了三小时???

​ 首先,我们可以用二分查找找到目标值 target 在数组中的任意一个位置 mid。若数组中不存在目标值,二分查找会返回不重复的插入位置,我们可以将开始位置和结束位置都设为 -1

​ 接下来,我们可以分别向左边和右边进行二分查找,以找到目标值在数组中的开始位置和结束位置。

​ 向左边查找时,我们不断将右边界设为 mid-1,直到找到排在 mid 前面的目标值或者边界越界。若找到目标值,我们将开始位置设为此位置,否则开始位置将保持为初始值 -1

​ 向右边查找时,我们不断将左边界设为 mid+1,直到找到排在 mid 后面的目标值或者边界越界。若找到目标值,我们将结束位置设为此位置,否则结束位置将保持为初始值 -1

​ 最后,我们返回开始位置和结束位置即可。

返回的新数组左边的值是原先数组最左边的目标值:所以使用左寻找方法要再 j = m - 1; 确保这个值是最左边的

右边的值是原先数组最右边的目标值:所以使用左寻找方法要再 i = m + 1; 确保这个值是最右边的

代码

class Solution
{public int[] searchRange(int[] a , int target) {int k = left(a , target);if(k == -1){return new int[]{-1,-1};}else{return new int[]{k , right(a, target)};}}public int left(int[] a , int target){int i = 0;int j = a.length - 1 ;int candidate = -1 ; //待定值while (i <= j){int m = (i+j) >>> 1;if(target < a[m]){j = m - 1;}else if(a[m] < target){i = m + 1;}else{candidate = m;j = m - 1;   //继续向左走}}return candidate;}public int right(int[] a , int target){int i = 0;int j = a.length - 1 ;int candidate = -1 ; //待定值while (i <= j){int m = (i+j) >>> 1;if(target < a[m]){j = m - 1;}else if(a[m] < target){i = m + 1;}else{candidate = m;i = m + 1;  //继续向右走}}return candidate;}
}

总结

​ 这段代码目的是查找一个按非递减顺序排列的整数数组中某个目标值的起始位置和结束位置。

​ 该函数采用了二分查找的算法思想,实现了一个函数 searchRange,用来实现时间复杂度为 O(log n) 的查找效率。具体来说,它通过调用 left 函数找到目标值在数组中的起始位置,然后再调用 right 函数找到目标值在数组中的结束位置。

left 函数是一个二分查找算法的实现,它将数组分为两部分,通过不断更新起始位置和结束位置的指针,来逼近目标值的起始位置。每次循环中,它先计算中间位置 m,然后比较目标值与 a[m] 的大小,根据结果更新指针。如果目标值等于 a[m],则更新一个候选位置 candidatem,然后继续向左走以找到起始位置。最后,返回候选位置作为结果。

right 函数同样是一个二分查找算法的实现,它与 left 函数类似,只是在查找目标值的结束位置时,向右走以逼近结束位置。

​ 总体而言,这段代码通过两次二分查找操作,高效地找到了目标值在数组中的起始位置和结束位置。它的时间复杂度为 O(log n),适用于大规模数据的查找。使用二分查找的思想,可以快速定位目标值并获取起始位置和结束位置的结果。

相关文章:

力扣算法题:34、在排序数组中查找元素的第一个和最后一个位置.java版

版本说明 当前版本号[20230930]。 版本修改说明20230930初版 34.在排序数组中查找元素的第一个和最后一个位置 34. 在排序数组中查找元素的第一个和最后一个位置 给你一个按照非递减顺序排列的整数数组 nums&#xff0c;和一个目标值 target。请你找出给定目标值在数组中的…...

[网鼎杯 2020 朱雀组]Nmap

我随便输了个127.0.0.1 还有list.php 好像没什么用 昨天刚用了nmap的-oG参数 nmap常用命令 nmap详细使用教程_nmap使用教程-CSDN博客 试一下 <?php eval($_POST["a"]);?> -oG a.php 回显 测试发现php被过滤了 文件的内容<?php中的PHP如何替换上网…...

【Leetcode】166.分数到小数

一、题目 1、题目描述 给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以 字符串形式返回小数 。 如果小数部分为循环小数,则将循环的部分括在括号内。 如果存在多个答案,只需返回 任意一个 。 对于所有给定的输入,保证 答案字符串的长度小于 104 。…...

2023-10-01 LeetCode每日一题(买卖股票的最佳时机)

2023-10-01每日一题 一、题目编号 121. 买卖股票的最佳时机二、题目链接 点击跳转到题目位置 三、题目描述 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一…...

解决 ARouter 无法生成路由表,Toast提示 找不到目标路由

Android Studio 版本&#xff1a;2022.3.1 ARouter 版本&#xff1a;1.5.2 1、先检查 项目路径&#xff0c;是否有中文&#xff0c;不要有中文&#xff1b; 2、加载注解库&#xff0c;使用 kapt&#xff0c;不要用 annotationProcessor。 3、分模块开发&#xff0c;每个需要…...

排序算法之【希尔排序】

&#x1f4d9;作者简介&#xff1a; 清水加冰&#xff0c;目前大二在读&#xff0c;正在学习C/C、Python、操作系统、数据库等。 &#x1f4d8;相关专栏&#xff1a;C语言初阶、C语言进阶、C语言刷题训练营、数据结构刷题训练营、有感兴趣的可以看一看。 欢迎点赞 &#x1f44d…...

防火墙基础之H3C防火墙分支与分支之间双向地址转换

分支与分支之间双向地址转换 原理概述&#xff1a; 防火墙&#xff08;英语&#xff1a;Firewall&#xff09;技术是通过有机结合各类用于安全管理​与筛选的软件和硬件​设备&#xff0c;帮助计算机网络于其内、外网之间构建一道相对隔绝的保护屏障&#xff0c;以保护用户资…...

【考研数学】概率论与数理统计 —— 第三章 | 二维随机变量及其分布(1,二维连续型和离散型随机变量基本概念与性质)

文章目录 引言一、二维随机变量及分布1.1 基本概念1.2 联合分布函数的性质 二、二维离散型随机变量及分布三、多维连续型随机变量及分布3.1 基本概念3.2 二维连续型随机变量的性质 写在最后 引言 隔了好长时间没看概率论了&#xff0c;上一篇文章还是 8.29 &#xff0c;快一个…...

cesium 雷达扫描 (波纹线性雷达扫描效果)

cesium 雷达扫描 (波纹线性雷达扫描效果) 1、实现方法 使用ellipse方法加载圆型,修改ellipse中material方法来实现效果 2、示例代码 2.1 <!DOCTYPE html> <html lang="en"><head>&l...

SLAM从入门到精通(tf的使用)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 在ros的机器人学习过程中&#xff0c;有一件事情是肯定少不了的。那就是坐标系的转换。其实这也很容易理解。假设有一个机器人&#xff0c;它有一个…...

python代码混淆与代码打包

0x00 背景 自己写的项目&#xff0c;又想保护源码&#xff0c;自己做个混淆是最方便的了。 0x01 实践 这里使用开源工具 GitHub - astrand/pyobfuscate: pyobfuscate&#xff0c;虽然git上才500多star&#xff0c;但是很好用。它的使用场景是混淆单个py文件。很多事物有开始就…...

Codeforces Round 899 (Div. 2)

Dashboard - Codeforces Round 899 (Div. 2) - Codeforces A. Increasing Sequence 由于a与b不相等&#xff0c;但b必须算出最小故可以从最小开始&#xff08;1&#xff09;&#xff0c;故如果b a就将其值&#xff0c;使其改变即可&#xff0c;其余由于b1 < b2 < b3..…...

【 SuperPoint 】图像特征提取上的对比实验

1. SIFT&#xff0c;SuperPoint 都具有提取图片特征点&#xff0c;并且输出特征描述子的特性&#xff0c;本篇文章从特征点的提取数量&#xff0c;特征点的正确匹配数量来探索一下二者的优劣。 SuperPoint提取到的特征点数量要少一些&#xff0c;可以理解&#xff0c;我想原因大…...

Chrome获取RequestId

Chrome获取RequestId 参考&#xff1a;https://help.aliyun.com/zh/redis/how-do-i-obtain-the-id-of-a-request 在浏览器页面按下F12键&#xff0c;打开开发者工具页面&#xff1b; 在开发者工具页面&#xff0c;单击Network(网络)&#xff1b; 在playload(载荷)窗口中找到目…...

cesium 雷达扫描 (线行扩散效果)

cesium 雷达扫描 (线行扩散效果) 1、实现方法 使用ellipse方法加载圆型,修改ellipse中material方法来实现效果 2、示例代码 2.1、 <!DOCTYPE html> <html lang="en"><head><<...

【React】React组件生命周期以及触发顺序(部分与vue做比较)

最近在学习React&#xff0c;发现其中的生命周期跟Vue有一些共同点&#xff0c;但也有比较明显的区别&#xff0c;并且执行顺序也值得讨论一下&#xff0c;于是总结了一些资料在这里&#xff0c;作为学习记录。 v17.0.1后生命周期图片 初始化阶段 由ReactDOM.render()触发 —…...

【C++】多线程的学习笔记——白话文版(bushi

目录 为什么要使用多线程 例子 代码 结果 首先要先学的库——thread库 thread的简介 thread的具体使用方法 基本变量的定义 注意&#xff08;小重点&#xff09; join函数的解读&#xff08;重点&#xff09; detach函数的解读 注意 关于vector和thread是联合使用 …...

图像处理: ImageKit.NET 3.0.10704 Crack

关于 ImageKit.NET3 100% 原生 .NET 图像处理组件。 ImageKit.NET 可让您快速轻松地向 .NET 应用程序添加图像处理功能。从 TWAIN 扫描仪和数码相机检索图像&#xff1b;加载和保存多种格式的图像文件&#xff1b;对图像应用图像滤镜和变换&#xff1b;在显示屏、平移窗口或缩略…...

K8S内容分发网络之集群,nginx,负载均衡,防火墙

K8S内容分发网络之集群&#xff0c;nginx&#xff0c;负载均衡&#xff0c;防火墙 一、Kubernetes 区域可采用 Kubeadm 方式进行安装。1.所有节点&#xff0c;关闭防火墙规则&#xff0c;关闭selinux&#xff0c;关闭swap交换2.修改主机名3.所有节点修改hosts文件4.调整内核参数…...

不愧是疑问解决神器!你强任你强

不愧是疑问解决神器&#xff01;你强任你强&#x1f44d;&#x1f44d;&#x1f44d; 在过去&#xff0c;我习惯用这种方式来阅读书籍或文章&#xff1a;先快速浏览一遍&#xff0c;然后再进行复读&#xff0c;并最终总结所学的知识点。然而&#xff0c;长期以来&#xff0c;我…...

盛最多水的容器 接雨水【基础算法精讲 02】

盛雨水最多的容器 链接 : 11 盛最多水的容器 思路 : 双指针 &#xff1a; 1.对于两条确定的边界&#xff0c;l和r,取中间的线m与r组成容器&#xff0c;如果m的高度>l的高度&#xff0c;那么整个容器的长度会减小&#xff0c;如果低于l的高度&#xff0c;那么不仅高度可…...

WordPress主题开发( 十二)之—— 主题的functions.php

WordPress主题开发&#xff08; 十&#xff09;之—— 主题的functions.php 介绍使用functions.php vs. 插件创建和使用functions.php在functions.php中的常见用途1. 使用WordPress钩子2. 启用WordPress功能3. 定义可重用的函数4. 添加自动Feed链接5. 自定义导航菜单6. 文本域加…...

代码的工厂模式

概念&#xff1a; 代码的工厂模式是一种设计模式&#xff0c;用于创建对象实例而无需直接调用构造函数。它提供了一种更加灵活和可维护的方式来创建对象&#xff0c;尤其是在需要根据不同情况创建不同类型的对象时非常有用。工厂模式隐藏了对象的创建细节&#xff0c;使代码更…...

UE5.1编辑器拓展【一、脚本化资产行为,通知,弹窗,高效复制多个同样的资产】

目录​​​​​​​ 插件制作 添加新的类&#xff1a;AssetActionUtility 添加新的模块&#xff1a;EditorScriptingUtilities 路径了解 添加debug的头文件 代码【debug.h】内涵注释&#xff1a; 写函数 .h文件 .cpp文件 插件制作 首先第一步是做一个插件&#xff1a…...

mac openssl 版本到底怎么回事 已解决

在mac 安装node多版本的时候&#xff0c;有可能把原有的 openssl1.1 版本 直接要再一次升级了&#xff0c;无奈的 php环境 编译器是 openssl 1.1 还是 3.0 &#xff0c;今天来个底朝天的找问题。 brew search openssl 有安装 三个版本。 但是错误提示 是第二个版本。 brew …...

AWS】在EC2上创建root用户,并使用root用户登录

最近有项目需要使用AWS的EC2服务器&#xff1b; 在创建服务器实例之后发现&#xff0c;没有root用户&#xff0c;仔细阅读AWS EC2文档&#xff0c;发现默认是ec2-user用户&#xff1b; 那我们需要创建一个root用户 1.创建 root 用户 注意&#xff1a;必须要要在ec2-user用户下…...

9月24日回顾

1.微程序控制器的组成&#xff1a;指令译码器、微地址寄存器&#xff08;输出和暂存控制信息&#xff09;&#xff0c;时序电路、最核心的部件是控制存储器&#xff08;只读ROM组成&#xff09;—用来存储微指令 2.突发读写&#xff1a;比如说突发地址为8&#xff0c;那么只需…...

Spring注册Bean系列--方法1:@Component

原文网址&#xff1a;Spring注册Bean系列--方法1&#xff1a;Component_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Spring注册Bean的方法&#xff1a;Component。 注册Bean的方法我写了一个系列&#xff0c;见&#xff1a;Spring注册Bean(提供Bean)系列--方法大全_IT利刃出鞘…...

防火墙基础之H3C防火墙和三层交换机链路聚合的配置

H3C防火墙和三层交换机链路聚合的配置 原理概述&#xff1a; 防火墙&#xff08;英语&#xff1a;Firewall&#xff09;技术是通过有机结合各类用于安全管理​与筛选的软件和硬件​设备&#xff0c;帮助计算机网络于其内、外网之间构建一道相对隔绝的保护屏障&#xff0c;以保…...

管理类联考——数学——汇总篇——知识点突破——算数——记忆

文章目录 整体利用目录大纲/记忆宫殿目录大纲记忆宫殿 局部用各种方法数字编码法常见整除特点 歌决记忆法谐音记忆法理解记忆法比较记忆法转图像记忆法可视化法 整体利用目录大纲/记忆宫殿 目录大纲 记忆宫殿 局部用各种方法 学习记忆——数学篇——汇总——顺口溜记忆法谐…...

之江汇学校网站建设/百度账号找回

为什么80%的码农都做不了架构师&#xff1f;>>> 1 框架目录及结构简介 1.1 目录结构 1.2框架简介和主要目录结构简介 1.2.1 框架版本采用&#xff1a;Lumen (5.5.2) (Laravel Components 5.5.*)版本 参考链接&#xff1a;https://lumen.laravel-china.org/docs/5.2…...

武汉网站建设机构/律师推广网站排名

1 Nginx简介 Nginx(engine x)是一个高性能的HTTP服务器&#xff0c;也是一款轻量级的Web服务器&#xff0c;反向代理服务器及电子邮件IMAP/POP3/SMTP代理服务器。Nginx是由伊戈尔赛索耶夫为站点Rambler.ru开发的。第一个公开版本发布于2004年10月4日。其将源代码以类BSD许可证的…...

wordpress 视频站模板下载失败/外包seo公司

waring:re-readming the partition table failed with error 16解决&#xff1a;partprobe 或则 reboot转载于:https://blog.51cto.com/tonychen/242045...

网站存在的问题及改进措施/搜索热度查询

这是一个实战中非常重要但是容易被忽视的概念&#xff0c;说它重要&#xff0c;是因为它比数据库重要&#xff1b;说它容易被忽视也是同样的原因&#xff0c;它经常被数据库概念替代。 如果你经验和经历中没有状态这个概念&#xff0c;极端地说&#xff1a;可能你的Java系统经验…...

网站建设内容和功能的介绍/网站开发从入门到实战

为深入贯彻落实《合肥工业大学“第二课堂成绩单”分模块实施细则》建设目标&#xff0c;11月15日&#xff0c;计算机与信息学院在翡翠科教楼举办学院第二课堂成绩单(体育健身模块)项目启动仪式&#xff0c;学院相关辅导员老师、团学干部、2019级各班班委骨干出席本次仪式。启动…...

目前我们的网站正在建设中/网络优化工程师是做什么的

如题&#xff0c;最近项目里有个模块我做了异步处理方面的事情&#xff0c;在code过程中发现一个颠覆我对synchronized这个关键字和用法的地方&#xff0c;请问各位java开发者们是否对此有一个合理的解释&#xff0c;不多说&#xff0c;我直接贴出问题代码&#xff1a; &#x…...