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.pswp.cn/news/906228.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/906228.shtml
英文地址,請注明出處:http://en.pswp.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;提示 考的…