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

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

题目链接: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去找。

相关文章:

  • JMeter的基本使用与性能测试,完整入门篇保姆式教程
  • Stable Diffusion 3 大模型文生图“开源英雄”笔记本部署和使用教程,轻松实现AI绘图自由
  • Aidlux 1.4 部署homeassistant core 2024.6实录
  • java试卷练习1
  • 简易版的进程池
  • print(“{}{}“.format())
  • 四、SpringMVC实战:构建高效表述层框架(二)
  • leetcode322零钱兑换(背包问题)
  • 图像分割(三)-RGB转HSV后图像分割方法
  • USB学习——12、usb初始化和插拔驱动软件流程大致框架描述
  • HTML静态网页成品作业(HTML+CSS)——美食火锅介绍网页(1个页面)
  • Autodesk Revit产品痛点
  • 力扣1793.好子数组的最大分数
  • 德克萨斯大学奥斯汀分校自然语言处理硕士课程汉化版(第十周) - 自然语言处理应用
  • 基于Django的博客系统之增加手机验证码登录(九)
  • 【5+】跨webview多页面 触发事件(二)
  • 230. Kth Smallest Element in a BST
  • httpie使用详解
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • springboot_database项目介绍
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • Windows Containers 大冒险: 容器网络
  • 基于组件的设计工作流与界面抽象
  • 京东美团研发面经
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 前端攻城师
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 一份游戏开发学习路线
  • 译有关态射的一切
  • ionic入门之数据绑定显示-1
  • Spring Batch JSON 支持
  • 组复制官方翻译九、Group Replication Technical Details
  • ​什么是bug?bug的源头在哪里?
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (pycharm)安装python库函数Matplotlib步骤
  • (python)数据结构---字典
  • (rabbitmq的高级特性)消息可靠性
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (全注解开发)学习Spring-MVC的第三天
  • (三)elasticsearch 源码之启动流程分析
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (一)WLAN定义和基本架构转
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • .Net Core中的内存缓存实现——Redis及MemoryCache(2个可选)方案的实现
  • .NET Framework杂记
  • .NET Micro Framework初体验
  • .net 中viewstate的原理和使用
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • @PreAuthorize与@Secured注解的区别是什么?
  • @RequestParam,@RequestBody和@PathVariable 区别