2089. 找出数组排序后的目标下标——O(n)做法!

       

        本题要求在一个已排序的数组 nums 中,找出所有等于目标值 target 的元素下标。若不存在这样的元素,则返回 {-1, -1}。解决该问题有两种主要方法:二分查找法和统计计数法。

二分查找法:首先对数组进行排序,然后通过二分查找确定 target 的下界(即第一个大于等于 target 的元素位置)和上界(即最后一个小于等于 target 的元素位置),这两个位置的交集即为所有等于 target 的元素下标。

        二分代码请看34. 在排序数组中查找元素的第一个和最后一个位置——边界问题不清楚?结果不知道是left还是right?四种大小关系不会转化?一篇文章告诉你!-CSDN博客

   

        采用二分查找法:首先确定大于等于目标值的最小索引,再找出小于等于目标值的最大索引,这两个索引之间的范围即为等于目标值的区间。

class Solution {
public:int lower_bound(vector<int>& nums,int target) {int n = nums.size();int left = 0,right = n - 1;while (left <= right) {int  mid = (right - left) / 2 + left;if (nums[mid] < target) {left = mid + 1;}else{right = mid - 1;}}return left;}vector<int> targetIndices(vector<int>& nums, int target) {ranges::sort(nums);int n = nums.size();int start = lower_bound(nums,target);if (start == n || nums[start] != target) return {};int end = lower_bound(nums,target + 1) - 1;vector<int> ans;for (int i = start;i <= end;i++){ans.emplace_back(i);}return ans;}
};

        时间复杂度:O(nlogn)

        空间复杂度:O(1)       

        统计小于和等于目标值的方法:通过less_count记录小于目标值的元素数量,equal_count记录等于目标值的元素数量。在排序后的数组中,less_count表示第一个目标值的下标,less_count+1表示第二个目标值的下标,依此类推,直到less_count + equal_count - 1

        例如:

输入:nums = [1,2,5,2,3], target = 2
输出:[1,2]

     

排序后的数组为 [1, 2, 2, 3, 5],其中 less = 1equal = 2,最终结果为 [1, 2]

class Solution {
public:vector<int> targetIndices(vector<int>& nums, int target) {int less_count = 0,equal_count = 0;for (int it:nums) {if (it < target) less_count++;else if (it == target) equal_count++;}vector<int> ans(equal_count);iota(ans.begin(),ans.end(),less_count);return ans;}
};

        时间复杂度:O(n)

        空间复杂度:O(1)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/906228.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pyspark测试样例

from pyspark.sql import SparkSession from pyspark.sql.functions import col, lit, concat 创建 SparkSession spark SparkSession.builder.appName(“SparkSQLExample”).getOrCreate() 创建 DataFrame&#xff08;可以是从 CSV、JSON 等文件读取&#xff09; data […

【AWS入门】AWS身份验证和访问管理(IAM)

【AWS入门】AWS身份验证和访问管理&#xff08;IAM&#xff09; [AWS Essentials] AWS Identity and Access Management (IAM) By JacksonML 众所周知&#xff0c;AWS亚马逊云科技位列全球云计算服务第一位&#xff0c;并且持续为广大客户提供安全、稳定的各类云产品和服务。…

HarmonyOS NEXT 适配高德地图FlutterSDK实现地图展示,添加覆盖物和移动Camera

HarmonyOS NEXT 适配高德地图 Flutter SDK 实现地图展示&#xff0c;添加覆盖物和移动 Camera 在现代移动应用开发中&#xff0c;地图功能是许多应用的核心组成部分之一。HarmonyOS NEXT 提供了强大的跨平台开发能力&#xff0c;而高德地图 Flutter SDK 则为开发者提供了丰富的…

三键标准、多键usb鼠标数据格式

三键标准usb鼠标数据格式 滚轮上滚 滚轮下滚 鼠标快速上移 鼠标快速右移 鼠标快速左移 鼠标右键单击_抬起 鼠标中键单击_抬起 鼠标左键单击_抬起 鼠标左键先按_右键再按_同时抬起 鼠标左右键同时按下_同时抬起 鼠标左右键同时按下_右键先抬 多键usb鼠标…

软件架构风格系列(7):闭环控制架构

文章目录 引言一、闭环控制架构&#xff1a;让系统学会“自我调节”的魔法&#xff08;一&#xff09;从温控系统理解核心原理&#xff08;二&#xff09;核心组件解析 二、架构设计图&#xff1a;闭环控制的“四大核心环节”三、Java实战&#xff1a;手写一个智能温控系统&…

Python中的组合数据类型

一、列表类型 列表是指一系列的按特定顺序排列的元素组成。使用[]定义列表&#xff0c;元素与元素之间使用英文的逗号分隔&#xff0c;列表中的元素可以是任意的数据类型。 #直接使用[]创建 lst[hello,world,99.8,100] print(lst)#可以使用内置的list()函数创建列表 lst2list(h…

集合进阶2

Java不可变集合、Stream流与方法引用深度解析 一、不可变集合&#xff08;Immutable Collections&#xff09;进阶指南 1.1 不可变集合核心特性 防御性编程&#xff1a;防止外部修改数据&#xff08;如传递集合给第三方库时&#xff09;线程安全&#xff1a;天然支持多线程读…

MySQL企业版免费开启,强先体验

近期Oracle突然宣布&#xff0c;MySQL企业版面向开发者免费开放下载&#xff0c;这一消息瞬间引爆DBA圈。作为数据库领域的“顶配车型”&#xff0c;企业版长期因高昂授权费让中小团队望而却步&#xff0c;如今免费开放无异于“劳斯莱斯开进菜市场”。 本文将深度拆解企业版的…

数据要素及征信公司数据要素实践

数据要素及征信公司数据要素实践 1.数据要素的定义与核心特征2.征信公司应用数据要素的实践路径3.总结1.数据要素的定义与核心特征 数据要素是数字经济时代的新型生产要素,指以电子形式存在、通过计算方式参与生产经营活动并创造价值的数据资源。 其核心特征包括: 新型生产…

Golang 范型

引言 Go 从 1.18 开始正式支持泛型&#xff0c;带来了更强的类型抽象能力&#xff0c;使得我们可以编写更通用、可复用的代码。本文档将介绍下泛型与应用的一些内容 什么是泛型 泛型&#xff08;Generic&#xff09;是一种允许你编写“参数化类型”的编程方式。你可以将类型…

vue-ganttastic甘特图label标签横向滚动固定方法

这个甘特图之前插件里&#xff0c;没有找到能固定label标签在屏幕上的办法&#xff0c;用css各种办法都没有实现&#xff0c;所以我我直接手写定位&#xff0c;用js监听滚动条滚动的距离&#xff0c;然后同步移动甘特图label标签&#xff0c;造成一种定位的错觉&#xff0c;以下…

VS2017编译openssl3.0.8

openssl是一个功能丰富且自包含的开源安全工具箱。它提供的主要功能有:SSL协议实现(包括SSLv2、SSLv3和TLSv1)、大量软算法(对称/非对称/摘要)、大数运算、非对称算法密钥生成、ASN.1编解码库、证书请求(PKCS10)编解码、数字证书编解码、CRL编解码、OCSP协议、数字证书验证、P…

16【架构进阶】Flask蓝图与应用工厂模式:构建企业级Web应用的核心技巧

【架构进阶】Flask蓝图与应用工厂模式&#xff1a;构建企业级Web应用的核心技巧 前言&#xff1a;为什么应用架构决定项目的天花板&#xff1f; 在Flask开发中&#xff0c;随着项目规模的扩大&#xff0c;如何组织代码结构成为决定项目可维护性和扩展性的关键因素。单文件应用…

系统架构设计-案例分析总结

系统架构设计-案例分析总结 2024年下半年系统架构设计师案例第1题 2022年下半年系统架构设计师案例第1题第2题 2021年下半年系统架构设计师案例第1题第2题 2024年下半年系统架构设计师案例 题&#xff1a;效用树可用性中ping/echo策略和心跳策略比较 第1题 阅读以下关于面向质…

软件架构风格系列(6):解释器架构

文章目录 引言一、从计算器到规则引擎&#xff1a;解释器架构的核心本质&#xff08;一&#xff09;什么是解释器架构&#xff1f;&#xff08;二&#xff09;核心组件&#xff1a;构建“语言理解系统”的三驾马车 二、架构设计图&#xff1a;从输入到执行的完整链路三、Java实…

Serverless 的未来与进阶:持续学习之路

Serverless 的未来与进阶&#xff1a;持续学习之路 恭喜你&#xff0c;坚持走到了《轻松入门 Serverless》系列博客的最后一篇&#xff01; 回顾我们的旅程&#xff0c;我们一起&#xff1a; 揭开了 Serverless 的神秘面纱&#xff0c;理解了它的核心思想、关键特征以及 Faa…

设备数据看板助力自动化工厂实现生产智能精细化管理

工厂数字化转型需要实现自动化设备生产现场可视化、设备系统间的互联互通&#xff0c;以及数据的智能决策。然而&#xff0c;当前许多制造企业仍面临着传统单机设备同质化严重、数字化服务能力不足、售后成本高企、系统集成效率低下等挑战。企业如何通过自动化装备看板和实时数…

pcie phy电气层(PCS)详解gen1、2 (rx)

注&#xff1a;推荐大家查看英文原版&#xff0c;笔者大部分内容也为翻译&#xff1b; S IP&#xff1a; 1. pcie供电&#xff1a; Vph&#xff1a; 1.2&#xff0c;1.5&#xff0c; 1.8V high voltage IO supply&#xff1b; Vp/VptxX/Vpdig &#xff1a;analog supply&am…

Java—— File详解

说明 File对象就表示一个路径&#xff0c;可以是文件的路径、也可以是文件夹的路径 这个路径可以是存在的&#xff0c;也允许是不存在的 获取File对象 方法名称说明public File(String pathname)根据文件路径创建文件对象public File(String parent,String child)根据父路径名…

【数字图像处理】半开卷复习提纲

1&#xff1a;要求 2张A4纸以内&#xff0c;正反面均可写 &#xff08;不过博主由于墨水浸到背面了&#xff0c;采用了把2张单面通过双面胶粘起来的方法&#xff0c;结果考前半个小时都在用这个难用的双面胶。。。&#xff09; 2&#xff1a;提纲内容 3&#xff1a;提示 考的…