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

devtools/2024/9/20 7:08:36/ 标签: 算法, leetcode, 数据结构

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

class Solution {
public:vector<int> searchRange(vector<int>& nums, int target) {if(nums.empty()) {return {-1, -1};}vector<int> ResultPos;int left = 0, right = nums.size() - 1;int first = -1, second = -1;while(left <= right){int mid = left + (right - left) / 2;if(nums[mid] == target){first = mid;right = mid - 1;} else if(nums[mid] > target){right = mid - 1;}else{left = mid + 1;}}left = 0, right = nums.size() - 1;while(left <= right){int mid = left + (right - left) / 2;if(nums[mid] == target){second = mid;left = mid + 1;}else if(nums[mid] > target){right = mid - 1;}else{left = mid + 1;}}ResultPos.push_back(first);ResultPos.push_back(second);return ResultPos;}
};

 这个代码让我对于二分法有了重新的认识,也就是假如说,以往找的都是数组中全都不同数的某一个数,而这个题目是数组中有相同的找第一个位置的。

我就拿查找某一个元素的第一个位置为例

int left = 0, right = nums.size() - 1;int first = -1, second = -1;while(left <= right){int mid = left + (right - left) / 2;if(nums[mid] == target){first = mid;right = mid - 1;} else if(nums[mid] > target){right = mid - 1;}else{left = mid + 1;}}

这个代码我原本以为是只能找到中间就截止了,但其实我想过,while里面的条件就是left  <= right

所以就算你找到了相同的元素,但是只要left <= right,那就不会停止搜索,所以让right往左移,找到第一个。这里讲一下为什么是right = mid - 1而不是left = mid + 1, 其实你想想,要是想找到前面的,是不是得需要一个指针往前走,那么这个也就是right = mid - 1;同理,想找到某一个元素的最后一个位置的话,那就得用left = mid + 1去找。


http://www.ppmy.cn/devtools/55599.html

相关文章

哈夫曼编码

一.哈夫曼树 哈夫曼树&#xff08;Huffman Tree&#xff09;是一种用于数据压缩的二叉树。它基于字符出现的频率构建&#xff0c;使得高频字符使用较短的编码&#xff0c;低频字符使用较长的编码&#xff0c;从而实现数据压缩。哈夫曼树也被称为最优二叉树或哈夫曼编码树。 哈夫…

Kafka精要

Apach Kafka 是一款分布式流处理框架&#xff0c;用于实时构建流处理应用。它有一个核心 的功能广为人知&#xff0c;即 作为企业级的消息引擎被广泛使用 kafka设计 Kafka 将消息以 topic 为单位进行归纳 将向 Kafka topic 发布消息的程序成为 producers. 将预订 topics 并消…

HTML(9)——字体修饰

常用的字体修饰属性 属性描述font-size字体大小 单位&#xff1a;数字pxfont-weight字体粗细 单位&#xff1a;数字font-style 字体倾斜 line-height行高 单位&#xff1a;数字px/数字(当前size的倍数&#xff09;font-family字体族…

Mac(M1芯片)安装多个jdk,Mac卸载jdk

1.jdk下载 oracle官方链接&#xff1a;oracle官方下载链接 2.安装 直接下一步&#xff0c;下一步就行 3.查看是否安装成功 出现下图内容表示安装成功。 4.配置环境变量 open -e .bash_profile 路径建议复制过去 #刷新环境变量 source ~/.bash_profile 5.切换方法 6.jdk…

Vue78-缓存路由组件

一、需求 路由切走的时候&#xff0c;组件会被销毁&#xff0c;路由切回来&#xff0c;组件被挂载&#xff01; 需要&#xff1a;路由切走的时候&#xff0c;组件不会被销毁。 二、代码实现 若是不加include属性&#xff0c;则在<router-view>里面展示的路由&#xff0c…

深入JVM:详解JIT即时编译器

文章目录 深入JVM&#xff1a;详解JIT即时编译器一、序言二、基础概念1、何为JIT即时编译2、热点代码 三、HotSpot内置的即时编译器1、C1编译器2、C2编译器3、分层编译3.1 协作流程 四、常见JIT优化技术1、方法内联2、逃逸分析&#xff08;1&#xff09;同步锁消除&#xff08;…

关于jupyter notebook的使用经验

jupyter notebook 第一点&#xff0c;调整每次打开jupyter notebook的时候的位置第二点&#xff0c;如何设置jupyter notebook可以使用本地anaconda创建的虚拟环境呢&#xff1f;第三点&#xff0c;使用jupyter notebook的技巧 以下三点都是独立的&#xff0c;可以根据自己的需…

jsonpath_解析例子代码

# _*_ coding : utf-8 _*_ # Time : 2023-11-05 13:23 # Author : haowen # File : jsonpath_解析_淘票票 # Project : py练习 import urllib.request url https://dianying.taobao.com/cityAction.json?activityId&_ksTS1699161894273_112&jsoncallbackjsonp113&…

2024年软考架构设计师终于PASS啦

文章目录 系统架构设计师是什么考试要求考试科目个人心得综合知识上午案例下午论文 系统架构设计师是什么 系统架构设计师&#xff0c;属于计算机技术与软件&#xff08;高级&#xff09;专业技术资格。考试合格人员能够根据系统需求规格说明书&#xff0c;结合应用领域和技术…

React Hooks使用规则:为什么不在条件语句和循环中使用它们

React Hooks为函数组件引入了状态和生命周期特性&#xff0c;极大地增强了其功能。然而&#xff0c;正确使用Hooks是确保组件稳定性和性能的关键。本文将探讨React Hooks的基本规则&#xff0c;以及为什么我们不应该在条件语句和循环中使用它们。 Hooks的基本规则 React团队为…

74. UE5 RPG 搭建场景设置光照和纹理流送

前面&#xff0c;我们对角色和敌人进行了一些完善。在这一篇文章里面&#xff0c;我们将进行对场景进行搭建&#xff0c;并对场景的光照和场景的后处理进行设置。 创建新场景 选择新建关卡 接着选择将关卡另存为 选择一个合理的位置 我们将场景内的网格地面删除掉&#xf…

微信小程序中的地图的使用

微信小程序中的地图组件 是一个用于展示地图的组件&#xff0c;提供了丰富的功能和配置选项&#xff0c;可以实现定位、标记、路线规划等多种地图相关的交互。下面是对这个组件的详细介绍&#xff0c;包括属性、事件以及示例代码。 组件属性 基础属性 longitude: 地图中心的经…

AcWing算法基础课笔记——状态压缩DP:蒙德里安的梦想

状态压缩DP 状态是整数&#xff0c;但把它看成二进制数&#xff0c;二进制中每一位是0或1表示不同的情况。 蒙德里安的梦想 291. 蒙德里安的梦想 - AcWing题库 题目 求把 NM&#x1d441;&#x1d440; 的棋盘分割成若干个 1212 的长方形&#xff0c;有多少种方案。 例如…

精确获取企业唯一标识(单)

根据企业名称、注册号或统一社会信用代码&#xff0c;获取企业唯一标识

生产环境出现问题,测试人如何做工作复盘?

很多时候我们能把大部分的Bug或一些部署等问题在业务上线之前就解决了&#xff0c;但由于某些因素&#xff0c;线上问题还是时而出现&#xff0c;影响业务生产甚至是公司效益。 避免线上问题的发生以及线上问题及时处理是测试人员的一项重要职责&#xff0c;如何快速地处理&am…

工作实践:11种API性能优化方法

一、索引优化 接口性能优化时&#xff0c;大家第一个想到的通常是&#xff1a;优化索引。 确实&#xff0c;优化索引的成本是最小的。 你可以通过查看线上日志或监控报告&#xff0c;发现某个接口使用的某条SQL语句耗时较长。 此时&#xff0c;你可能会有以下疑问&#xff…

代码随想录算法训练营第43天(py)| 动态规划 | 完全背包、518. 零钱兑换 II、377. 组合总和 Ⅳ、爬楼梯

完全背包 完全背包和01背包问题唯一不同的地方就是&#xff0c;每种物品有无限件。 有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品都有无限个&#xff08;也就是可以放入背包多次&#xff09;&#xff0c;求…

攻击者开始使用 XLL 文件进行攻击

近期&#xff0c;研究人员发现使用恶意 Microsoft Excel 加载项&#xff08;XLL&#xff09;文件发起攻击的行动有所增加&#xff0c;这项技术的 MITRE ATT&CK 技术项编号为 T1137.006。 这些加载项都是为了使用户能够利用高性能函数&#xff0c;为 Excel 工作表提供 API …

【面试题】多线程

目录 什么是线程&#xff1f;它与进程的区别是什么&#xff1f;解释一下并行与并发的区别。简述线程安全的概念&#xff0c;并举例说明。如何实现线程同步&#xff1f;有哪些常见的同步机制&#xff1f;在Java中&#xff0c;如何创建线程&#xff1f;谈谈继承Thread类与实现Run…

Java-拼接字符串数组(String.join()方法)

问题引入 刷算法题lc2288的时候遇见的一个小细节&#xff0c;记录一下&#xff0c;有兴趣的朋友可以做一下&#xff0c;练习一下哈哈~ 此题需要使用大家都比较熟悉的split方法将句子按照空格拆分为字符串数组。 然后再在数组中对每一个字符串操作&#xff0c;操作完成后要求…