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

news/2025/1/12 7:57:36/

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

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

你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。
示例 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]

思路:二分查找
1、通过stl的binarySearch确定待查元素存在
2、lower_bound找到第一个出现的位置
3、upper_bound找到最后一个出现位置的下一个
4、元素不存在直接返回{-1,-1}

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;vector<int> searchRange(vector<int>& nums, int target) {if (binary_search(nums.begin(), nums.end(), target)){int pos1 = lower_bound(nums.begin(), nums.end(), target) - nums.begin();int pos2 = upper_bound(nums.begin(), nums.end(), target) - nums.begin() - 1;return{ pos1,pos2 };}return { -1,-1 };
}
vector<int> searchRangeV2(vector<int>& nums, int target) {if (binary_search(nums.begin(), nums.end(), target)){int pos1 = lower_bound(nums.begin(), nums.end(), target) - nums.begin();int count = 0;for (int i = pos1 + 1; i < nums.size(); i++){if (nums[i] == target){count++;}elsebreak;}return { pos1,pos1 + count };}return { -1,-1 };
}int main() {vector<int> nums{ 5,7,7,8,8,10 };int target = 8;vector<int>res = searchRange(nums, target);for (int e : res){cout << e << " ";}cout << endl;return 0;
}

http://www.ppmy.cn/news/47120.html

相关文章

【C进阶】详解预处理指令

文章目录 预定义符号#define#define定义标识符#define定义宏#define替换规则#和##带副作用的宏参数宏和函数对比#undef命令行定义 条件编译文件包含头文件被包含的方式嵌套文件包含 其他预处理指令总结 预定义符号 __FILE__ //进行编译的源文件 __LINE__ //文件当前的行号 __DA…

《Netty》从零开始学netty源码(三十八)之PoolSubPage

PoolSubPage 上一节中我们提到了PooledByteBufAllocator类&#xff0c;先看下netty中有关内存的类关系&#xff1a; 从图中可以看到PoolSubPage为最小单位&#xff0c;所以我们先从最小的开始分析&#xff0c;先看下它的属性值&#xff1a; 为了更好的理解这些属性的意义&…

【CSS】鼠标移动到元素上方显示 / 移出盒子范围隐藏案例 ( 子绝父相 | 显示隐藏元素对象 | 鼠标经过样式设置 | 半透明遮罩设置 )

文章目录 一、鼠标移动到元素上方显示 / 移出盒子范围隐藏案例要点分析1、子绝父相2、显示隐藏元素对象3、鼠标经过样式设置4、半透明遮罩设置 二、代码示例 一、鼠标移动到元素上方显示 / 移出盒子范围隐藏案例要点分析 1、子绝父相 这里要 在一个 div 盒子上方套一层遮罩 , 遮…

电脑录屏按哪个键?您可以这样操作!

案例&#xff1a;电脑按哪3个键&#xff0c;可以录屏&#xff1f; 【我平常喜欢使用快捷键在电脑上快速完成一些操作。最近接触到了电脑录屏&#xff0c;感觉使用它一系列的操作比较麻烦。想在这里问问小伙伴们&#xff0c;有没有使用快捷键成功操作过的朋友&#xff01;】 电…

软件工程概述

软件工程基础知识点(一) 计算机软件 计算机软件指计算机系统中的程序及其文档 程序是计算任务的处理对象和处理规则的描述 任务&#xff1a;以计算机为处理工具的任务都是计算任务处理对象&#xff1a;数据(如数据、文字、图形、图像、声音等&#xff0c;他们都是表示&#…

PLATO: Pre-trained Dialogue Generation Model with Discrete Latent Variable论文学习

一、大纲内容 二、详细内容 Abstract ○ 对话生成模型可以用于闲聊、知识对话、对话问题生成 ○ 本文 ■ 构建了一个灵活的attention机制&#xff0c;充分的促进了单向和双向的语言生成模型 ■ 介绍了一个离散的潜变量&#xff0c;较好的解决了一问多答的问题 ■ 上述两个结构…

Jenkins 实现自动化部署

安装 windows下安装&#xff1a;https://blog.csdn.net/u014641168/article/details/130286547 linux下安装&#xff1a;https://blog.csdn.net/u014641168/article/details/130282439 Jenkins支持JDK1.8对应版本说明&#xff1a;https://blog.csdn.net/u014641168/article/…

OpenCV实例(一)人脸检测

OpenCV实例&#xff08;一&#xff09;人脸检测 1.人脸检测和识别概述2.使用OpenCV进行人脸检测2.1静态图像中的人脸检测2.2视频中的人脸检测 作者&#xff1a;Xiou 1.人脸检测和识别概述 计算机视觉使很多任务成为现实&#xff0c;其中两项任务就是人脸检测&#xff08;在图…