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

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

脑子复健运动

题目

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

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

你必须设计并实现时间复杂度为Ologn的算法解决此问题。

示例 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]

解题

看时间复杂度就是在说用二分用二分用二分

class Solution {
public:vector<int> searchRange(vector<int>& nums, int target) {vector<int> res;//数组为空直接返回if(nums.size()==0){res.push_back(-1);res.push_back(-1);return res;}//找相同值的左位置int l=0, r=nums.size()-1;while(l<r){int mid = l+(r-l)/2;if(nums[mid]>=target){ //取r等于r=mid;}else{l=mid+1;}}//如果找不到,直接返回[-1,-1]if(nums[l]!=target){res.push_back(-1);res.push_back(-1);return res;} //如果能找到,向res内加入值的左位置res.push_back(l);//继续找相同值的右位置l=0, r=nums.size()-1;while(l<r){int mid = l+(r-l)/2+1;  //这里需要+1,否则最后无限循环 if(nums[mid]<=target){ //取l等于 l=mid;}else{r=mid-1;}}res.push_back(r); //加入值的右位置(l和r一样)return res;}
};

运行通过贴一个

在这里插入图片描述

相关文章:

  • 虚拟机系统介绍
  • ZeroNet 地址生成器1.0
  • Redis的过期删除策略和内存淘汰策略
  • Spring MVC HandlerAdapter 的作用是什么? 为什么 DispatcherServlet 不直接调用 Controller 方法?
  • YOLOv8融合CPA-Enhancer【提高恶略天气的退化图像检测】
  • oracle 锁的添加方式和死锁的解决
  • Yocto meta-toradex-security layer 创建独立数据分区
  • MongoDB副本集搭建与核心机制
  • 【回眸】香橙派Zero2(全志H616)初探
  • 2026届华为海思秋暑期IC实习秋招笔试真题(2025.04.23更新)
  • 函数的多种参数使用形式
  • 驱动开发系列53 - 一个OpenGL应用程序是如何调用到驱动厂商GL库的
  • 基于Python爬虫的音乐歌手的歌名和歌词信息爬取(可以输入歌手名字,然后爬取到该歌手的全部歌名和歌词信息)
  • Ubuntu主机上通过WiFi转有线为其他设备提供网络连接
  • 【蓝桥杯】产值调整
  • 基于大模型的结肠癌全病程预测与诊疗方案研究
  • Android插拔U盘导致黑屏问题排查
  • macOS 连接远程服务器的推荐方法和工具
  • Kingbase性能优化浅谈
  • 《深入理解计算机系统》阅读笔记之第一章 计算机系统漫游
  • 2025年两院院士增选工作启动,名额均不超过100名
  • 外卖口水战四天,京东美团市值合计蒸发超千亿港元
  • 受折纸艺术启发可移动可变形的新型超材料问世
  • 贝壳:网传“深圳贝壳内部通知”不实
  • 恒瑞医药一季度营收72亿元,净利增超36%:授权交易推动利润增长
  • 海关总署:明确部分货物、物品不再按进出境特殊物品监管