​leetcode算法题第34题:在排序数组中查找元素的第一个和最后一个位置​

34.给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。 结束位置的指针指向的元素一定比target大,因此在nums[mid] 阅读详情

leetcode算法题第34题:在排序数组中查找元素的第一个和最后一个位置


题目:

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

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

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


解题思路:二分查找

1.初始化: 左边界 i = 0,右边界 j = len(nums) - 1。
2.循环二分: 当闭区间 [i, j]无元素时跳出;
        1.计算中点 m = (i + j) / 2 (向下取整);
        2.若 nums[m] < target,则 targettarget 在闭区间 [m + 1, j] 中,因此执行 i = m + 1i=m+1;
        3.若 nums[m] > target,则 target 在闭区间 [i, m - 1]中,因此执行 j = m - 1;
        4.若 nums[m] = target,则右边界 right 在闭区间 [m+1, j] 中;左边界 leftleft 在闭区间 [i, m-1] 中。因此分为以下两种情况:
                1.若查找 右边界 right ,则执行 i = m + 1 ;(跳出时 i 指向右边界)
                2.若查找 左边界 left ,则执行 j = m - 1 ;(跳出时 j指向左边界)
3.返回值: 应用两次二分,分别查找 right 和 left ,最终返回 right - left - 1 即可。


代码:

 

 

【Leetcode HOT100】在排序数组中查找元素的第一个和最后一个位置 c++ 在排序数组中查找元素的第一个和最后一个位置:给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回[-1, -1]。你必须设计并实现时间复杂度为O(log n)的算法解决此问题... 阅读详情

相关推荐

Java实现 LeetCode 34 在排序数组中查找元素的第一个和最后一个位置

在排序数组中查找元素的第一个和最后一个位置 给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。 你的算法时间复杂度必须是 O(log n) 级别。 如果数组中不存在目标值,返回 [-1, -1]。 示例 1: 输入: nums = [5,7,7,8,8,10], target = 8 输出: [3,4] 示例 2: 输入: num...

南 墙 1万+

给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。

【代码】给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。

qq_65055996的博客 1191

别再魔改LWIP了!用STM32CubeMX配置F407的TCP保活(KeepAlive)与自动重连

本文详细介绍了如何通过STM32CubeMX配置STM32F407的LWIP协议栈,实现TCP保活(KeepAlive)与自动重连功能,解决网络异常断开问题。文章提供了从基础环境配置到自动重连架构设计的完整指南,帮助开发者构建高可靠的网络连接机制,适用于工业物联网和嵌入式设备开发。

weixin_27038245的博客 237

leetcode 算法基础day1

二分查找

Chocological7的博客 726

【LPDDR4 - 学习二】LPDDR4 介绍 ——LPDDR4 芯片引脚说明解析

本文系统解析了LPDDR4内存芯片的引脚定义与特性,重点介绍了272球POPFBGA封装的双通道架构。内容涵盖电源管理(三级供电架构与上电时序)、控制信号(差分时钟与复用命令总线)、数据接口(16位双向数据总线与选通信号)以及校准复位等核心模块。通过表格详细列明了各引脚电压范围、功能定义及工程注意事项,并附有典型封装球位分布图。全文基于JEDEC标准,为移动设备内存设计提供全面的硬件参考,特别强调电源时序控制、信号完整性及抗干扰设计等关键点。

zap15622077817的博客 2641

CiteSpace关键词聚类图谱含义详细解析

CiteSpace关键词聚类图谱含义详细解析 回顾上一次推文:CiteSpace关键词共现图谱含义详细解析 其中有一句: 当你人工已经可以很容易的进行归纳后,就不需要再利用CiteSpace聚类功能啦。 我们来看一下上次推文做出来的关键词共现图谱: 人工不好归纳!那怎么聚类呢? 此时便可使用CiteSpace的聚类功能啦! 如下所示:我们可以清晰地看到上边的关键词共现网络聚成了一个个不规则区域...

qq_39974284的博客 6万+

【LeetCode刷题】34. 在排序数组中查找元素的第一个和最后一个位置

【LeetCode刷题】34. 在排序数组中查找元素的第一个和最后一个位置。给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回[-1, -1]。...

weixin_48323589的博客 1518

别再折腾环境了!Windows 11 + VSCode + CMake 3.31.4 + MinGW-w64 一键式配置指南(附常见报错解决)

本文提供Windows 11下VSCode、CMake 3.31.4和MinGW-w64的一键式配置指南,帮助开发者快速搭建高效C++开发环境。涵盖工具链选型、环境变量配置、项目初始化及常见报错解决方案,大幅提升开发效率。

weixin_28841265的博客 186

算法题打卡力扣第34题:在排序数组中查找元素的第一个和最后一个位置(mid)

本文介绍了在非递减数组中查找目标值出现范围的三种方法。暴力解法通过两次遍历分别找到首次和末次出现位置,时间复杂度O(n)。二分查找法通过两次二分搜索分别定位左右边界,优化后时间复杂度降至O(logn)。第三种思路巧妙利用二分查找寻找第一个大于等于和大于目标值的位置来确定边界。其中二分查找法是最优解,兼顾效率与简洁性。文章提供了C++代码实现,并分析了各方法的时间复杂度。

m0_68165821的博客 1034

CMakeTestCCompiler.cmake错误解决

CMakeTestCCompiler.cmake错误解决欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 最近编译项目的时候,遇到一个cmake的错误,具体错误信息如下: /path-to-pr

昨夜星辰的博客 2万+

域控制器开发避坑实录:从硬件设计到软件集成的5个关键挑战

本文深入剖析了域控制器开发中的5大关键挑战,从硬件选型到软件集成,涵盖智能驾驶芯片选择、实时性优化、AUTOSAR架构适配等核心问题。通过实战案例和数据对比,为工程师提供避坑指南,助力提升开发效率和系统可靠性。

weixin_29258297的博客 395

Leetcode 34. 在排序数组中查找元素的第一个和最后一个位置 【数组 二分查找】

Leetcode 34. 在排序数组中查找元素的第一个和最后一个位置 【数组 二分查找】

Bitdancing的专栏 4004

STM32 BOOTLOADER配置以及APP跳转实现(裸机)

Bootloader是硬件启动的引导程序,是运行操作系统的前提。在操作系统内核或用户应用程序运行之前运行的一段小代码。对硬件进行相应的初始化和设定,最终为操作系统准备好环境。APP就是我们的应用程序,经过硬件引导程序之后跳转到系统程序运行。

吻等离子的博客 3356

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

本文是二分查找-模版III 的第一题,后面的几道题的也算是本模版的微调版,加油~

余光的博客 3944

手把手教你玩转服务器芯片架构--​​7.1 项目1:基于FPGA的RISC-V软核设计(Verilog实现核心指令执行单元)​

本文介绍了基于FPGA的RISC-V软核设计实践项目。项目采用Verilog实现RV32I指令集核心处理器,包含指令解码、ALU、寄存器堆等关键模块设计,并通过功能仿真验证。在Xilinx Artix-7 FPGA上完成综合与部署,资源利用率控制在5%以内。最后探讨了五级流水线优化、指令集扩展等进阶方案。该实践完整覆盖了从指令集设计、RTL实现到FPGA部署的全流程,可作为学习处理器架构与FPGA开发的典型案例。

MHD0815的博客 173

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

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

这篇文章介绍了在排序数组中查找目标值起始和结束位置的二分查找算法。主要内容包括: 查找左边界时使用向下取整的中值计算,通过right=mid保留可能的左边界 查找右边界时使用向上取整的中值计算,通过left=mid保留可能的右边界 关键点说明:循环条件使用left<right避免死循环,查找左右边界时采用不同的中值计算方式 常见错误分析:展示了可能导致边界遗漏或死循环的错误写法 算法正确性验证:以[5,7,7,8,8,10]为例,详细演示了查找target=8的执行过程 比较了不同中值计算方式对算法性

2402_83315537的博客 1629

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

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

Leetcode 34. 在排序数组中查找元素的第一个和最后一个位置1、问题分析2、问题解决3、总结 1、问题分析 题目链接:https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array/   本质上就是一个二分查找问题。代码我已经进行了详细的注释,理解应该没有问题,读者可以作为参考,如果看不懂(可以多看几遍),欢迎留言哦!我看到会解答一下。 2、问题解决   笔者以C++方式解决。 #inc

珍惜 7777

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

二分法的强化(力扣34-查找元素的第一个最后一个位置)

34. 在排序数组中查找元素的第一个和最后一个位置给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。进阶:你可以设计并实现时间复杂度为 $O(\log n)$ 的算法解决此问题吗?输入:nums = [5,7,7,8,8,10], target = 8输出:[3,4]输入:nums = [5,7,7,8,8,10], target = 6输出:[-1,-1]

2301_79524309的博客 1732

【LeetCode 热题 100】34. 在排序数组中查找元素的第一个和最后一个位置——二分查找

问题要求在一个升序排序的数组。

最短的捷径就是绕远路,绕远路才是我的最短捷径。 1402

LeetCode刷题:[34]. 在排序数组中查找元素的第一个和最后一个位置

LeetCode刷题顺序指南:参考代码随想录(),网站整理了leetcode刷题攻略,一个超级详细的刷题顺序,,只要按照顺序刷就可以了,左面的菜单栏就是刷题顺序,每一个专题,挨个刷就可以,不用自己再去题海里选题了!

weixin_46896210的博客 1110

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

如果数组中不存在目标值。

weixin_48941116的博客 786

二分查找法-LeetCode第34题:在排序数组中查找元素的第一个和最后一个位置题解

二分查找法-LeetCode第34题:在排序数组中查找元素的第一个和最后一个位置题解前言题目描述分析代码运行结果 前言 ……还是一个学生,做题解只是个人记录,代码有不少错误或纰漏之处,还望多多包涵。 题目描述 给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。 你的算法时间复杂度必须是 O(log n) 级别。 如果数组中不存在目标值,返回 [-1, -1]。 示例 1: 输入: nums = [5,7,7,8,8,10], target =

oreki_lingxin的博客 1273

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

本文解析了LeetCode 34题,探讨如何在有序数组中高效查找目标值的起始和结束位置。通过分析原始代码的复杂度问题,提出优化方案:采用两次独立的二分查找,分别定位左边界(第一个等于目标值的位置)和右边界(最后一个等于目标值的位置)。优化后的代码逻辑更清晰,时间复杂度保持O(log n),空间复杂度为O(1)。关键点在于正确处理二分查找的边界条件,先验证左边界有效性,再推导右边界,确保结果准确。

weixin_52811458的博客 1392

LeetCode (二分小专题)33搜索旋转排序数组&34在排序数组中查找元素的第一个和最后一个位置&35搜索插入位置

前言 国庆前最后一次打卡,国庆后继续开启,公众号bigsai回复进群欢迎加入打卡,如有帮助记得点赞收藏。 近期打卡记录: LeetCode 32最长有效括号(困难) (本周) LeetCode 30串联所有单词的子串&31下一个排列(上周) LeetCode 27移除元素&28实现strStr()&29两数相除(上周) 二分查找我想大家都很熟悉,二分查找每次判断并比较元素所在区间进行压缩,每次都可以压缩一半的区间,所以压到1个大小把它你想来看就是(最坏)扩散了n次到达原始长度。 很

bigsai 3214

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

题目要求在排序数组中查找目标值的起始和结束位置,若不存在则返回[-1, -1]。三种解法均基于二分查找找下界的思想:通过查找target的下界确定起始位置,查找target+1的下界确定结束位置。解法差异主要体现在循环条件和边界处理上:解法一使用经典二分循环条件l<=r,解法二改为l<r,解法三采用开区间处理l+1<r。三种方法的时间复杂度均为O(log n),解法二和解法三在边界处理上更简洁直观。

大家好,我是千楼,全栈开发工程师,分享日常学习和工作,记录成长~~~ 1082
上一篇: ​leetcode算法题第33题:搜索旋转排序数组​
下一篇: ​leetcode算法题第36题:有效的数独​
foolS22
博客等级 码龄5年 1粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值