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

  • 1. 题目描述
  • 2. 题目分析
  • 3. C++语言实现

1. 题目描述

难度:中等

2. 题目分析

看到题目我们需要知道以下几点:

  • 数组是有序的
  • 数组中存在重复的元素
  • 算法时间复杂度必须是O(logn)级别
  • 目标元素可能不存在与数组中

根据题目要求,算法复杂度必须是O(logn)级别,那么二分法就是最佳的算法。根据本题,我们要寻找的是目标元素在数组的起始位置和结束位置,我们可以根据二分法先搜索目标元素的起始位置,然后以该起始位置为起点,在搜索结束位置即可。时间复杂度为O(logn)

3. C++语言实现

代码如下:

class Solution {public:vector<int> searchRange(vector<int>& nums, int target) {vector<int> res(2,-1);// 如果数组为空,直接返回[-1,-1]if(nums.empty()) return res;// 初始化变量int n=nums.size(),l=0,r=n-1;// 循环条件是左下标<右下标while(l<r){int m=l+(r-l)/2;if(nums[m]>=target) r=m;else l=m+1;}// 如果nums[l]!=target,说明目标不存在,返回[-1,-1]if(nums[l]!=target) return res;// 否则l即目标元素的起始位置res[0]=l;// 寻找右节点r=n;while(l<r){int m=l+(r-l)/2;if(nums[m]<=target) l=m+1;else r=m;}res[1]=l-1;return res;}
};

运行结果为:

LeetCode--34.在排序数组中查找元素第一个和最后一个位置(二分法)相关推荐

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

    在排序数组中查找元素的第一个和最后一个位置 class Solution {public int[] searchRange(int[] nums, int target) {int len = nu ...

  2. 62. Leetcode 34. 在排序数组中查找元素的第一个和最后一个位置 (二分查找-局部有序)

    给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置.如果数组中不存在目标值 target,返回 [-1, -1].进阶:你可以设计并实现时 ...

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

    给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置. 你的算法时间复杂度必须是 O(log n) 级别. 如果数组中不存在目标值,返回 [ ...

  4. leetcode 34. 在排序数组中查找元素的第一个和最后一个位置(二分查找)

    给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置. 如果数组中不存在目标值 target,返回 [-1, -1]. 进阶: 你可以设计并 ...

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

    1.左右区间要单独查找,时间复杂度为O(logN)O(logN)O(logN) 2.查找右边界的时候,左边向右收缩:查找左边界的时候,右边向左收缩. class Solution {public:in ...

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

    https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array/ 解决方案 class ...

  7. 去掉数组最后一个元素_leetcode 34. 在排序数组中查找元素的第一个和最后一个位置每天刷一道leetcode算法系列!...

    作者:reed,一个热爱技术的斜杠青年,程序员面试联合创始人 前文回顾: leetcode1. 两数之和--每天刷一道leetcode系列! leetcode2. 两数相加--每天刷一道leetcod ...

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

    前言 国庆前最后一次打卡,国庆后继续开启,公众号bigsai回复进群欢迎加入打卡,如有帮助记得点赞收藏. 近期打卡记录: LeetCode 32最长有效括号(困难) (本周) LeetCode 30串 ...

  9. [算法]LeetCode 专题 -- 二分查找专题 34. 在排序数组中查找元素的第一个和最后一个位置

    LeetCode 专题 – 二分查找专题 34. 在排序数组中查找元素的第一个和最后一个位置 难度:中等 题目描述 给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值 ...

最新文章

  1. 【转载】locust性能测试3
  2. 插入排序 链表 java_JAVA单链表(多项式)直接插入排序,大家看看我的怎么不行呢...
  3. webpack 教程 那些事儿05-多页应用
  4. 华为手机logcat不出日志解决方案
  5. 操作系统,你搞定了没?
  6. 【母亲节快乐】程序员的表达方式,了解一下?
  7. C语言及程序设计进阶例程-30 联合体及其应用
  8. 毁掉孩子自信的10个杀手
  9. 给java虚拟机增加一个属性,java -D
  10. MobileNetV3——论文翻译
  11. iOS申请真机调试证书 图文详解
  12. DirectX修复工具使用技巧之三——命令行与配置文件参数介绍
  13. 网络摄像机进行互联网视频直播录像方案的选择,EasyNVS or EasyCloud or EasyGBS?
  14. dsp正弦信号发生c语言,正弦信号发生器的DSP实现方法及比较
  15. LyricsX for Mac(桌面歌词显示器)
  16. 山寨免费软件的阴谋!
  17. 易企秀 背景音乐 下载
  18. MGN:Learning Discriminative Features with Multiple Granularities for Person Re-Identification阅读笔记
  19. 每日一题(day5)
  20. 2017电影经典语句

热门文章

  1. Ubuntu终极指南
  2. 人受失败后多久可以做第二次_做完皮秒多久可以用自己的护肤产品、过来人分享皮秒后怎么护肤?...
  3. mysql 不能定义用户变量名_mysql 变量名称的使用不当的一个错误
  4. 使用uiautomator2进行webview页面的测试
  5. 转 mysql处理高并发,防止库存超卖
  6. IntelliJ IDEA 2018安装+激活+汉化(详细图解)
  7. Tomcat整体介绍
  8. python基础面试题1
  9. python D14 内置函数二
  10. 工具使用-----Jmeter的基础用法