尋找兩個正序數組的中位數(C++)

給定兩個大小分別為?m?和?n?的正序(從小到大)數組?nums1?和?nums2。請你找出并返回這兩個正序數組的?中位數?。

算法的時間復雜度應該為?O(log (m+n))?。

示例 1:

輸入:nums1 = [1,3], nums2 = [2]
輸出:2.00000
解釋:合并數組 = [1,2,3] ,中位數 2

示例 2:

輸入:nums1 = [1,2], nums2 = [3,4]
輸出:2.50000
解釋:合并數組 = [1,2,3,4] ,中位數 (2 + 3) / 2 = 2.5

O(m+n)復雜度的方法

class Solution {
public:double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {int l1 = 0, l2 = 0, mid1, mid2;int r1 = nums1.size() - 1, r2 = nums2.size() - 1;int total = nums1.size() + nums2.size();bool is_odd = total % 2;int mid = total / 2;double result = 0.0;// 如果 nums1 為空if (nums1.empty()) {if (nums2.empty()) return 0.0; // 兩個都空if (is_odd) return nums2[mid];return (nums2[mid - 1] + nums2[mid]) / 2.0;}// 如果 nums2 為空if (nums2.empty()) {if (is_odd) return nums1[mid];return (nums1[mid - 1] + nums1[mid]) / 2.0;}// 合并兩個數組(直接模擬合并直到中位數)int i = 0, j = 0, count = 0;int prev = 0, curr = 0;while (count <= mid) {prev = curr;if (i < nums1.size() && (j >= nums2.size() || nums1[i] <= nums2[j])) {curr = nums1[i++];} else {curr = nums2[j++];}count++;}if (is_odd) return curr;return (prev + curr) / 2.0;}
};

O(LogMin(M,N))的方法

class Solution {
public:int getKthElement(const vector<int>& nums1, const vector<int>& nums2, int k) {int index1 = 0, index2 = 0;int n1 = nums1.size(), n2 = nums2.size();while (true) {// 特殊情況:nums1已經用完了if (index1 == n1) return nums2[index2 + k - 1];if (index2 == n2) return nums1[index1 + k - 1];// 如果只要第1小的數,直接比較兩邊頭部if (k == 1) return min(nums1[index1], nums2[index2]);// 正常處理int half = k / 2;// 計算每個數組跳多少步int newIndex1 = min(index1 + half, n1) - 1;int newIndex2 = min(index2 + half, n2) - 1;int pivot1 = nums1[newIndex1];int pivot2 = nums2[newIndex2];// 誰的 pivot 小,誰的前面都不可能是第k小,全部丟掉if (pivot1 <= pivot2) {k -= (newIndex1 - index1 + 1);index1 = newIndex1 + 1;} else {k -= (newIndex2 - index2 + 1);index2 = newIndex2 + 1;}}}double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {int total = nums1.size() + nums2.size();// 奇數情況,找第 (n/2 + 1) 小if (total % 2 == 1) {return getKthElement(nums1, nums2, total / 2 + 1);} // 偶數情況,取中間兩個平均else {return (getKthElement(nums1, nums2, total / 2) +getKthElement(nums1, nums2, total / 2 + 1)) / 2.0;}}
};

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/88341.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/88341.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/88341.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Expected Sarsa 算法的數學原理

&#x1f31f; 一、Expected Sarsa 算法的數學原理 1. 什么是 Expected Sarsa&#xff1f; Expected Sarsa 是一種基于 時序差分&#xff08;Temporal Difference, TD&#xff09;學習 的強化學習算法&#xff0c;用于估計 動作值函數 ( q_{\pi}(s, a) )。它是 Sarsa 算法的一種…

Vue的watch和React的useEffect

參考文章&#xff1a;https://zhuanlan.zhihu.com/p/686329898

idea中合并git分支

1.把本地dev代碼合并到本地master代碼在提交代碼之前&#xff0c;先確保dev和master都拉取了最新的代碼都進行了Git->pull了這時候確保Local的第一個分支是master分支&#xff0c;然后選擇dev分支 ,鼠標右鍵-》Merge dev into master這時候會提示 有合并到本地master最新的代…

《Spring 中上下文傳遞的那些事兒》Part 7:異步任務上下文丟失問題詳解

&#x1f4dd; Part 7&#xff1a;異步任務上下文丟失問題詳解 在現代 Java 應用中&#xff0c;異步編程已經成為提升性能、解耦業務邏輯的重要手段。無論是使用 CompletableFuture、線程池&#xff08;ExecutorService&#xff09;、定時任務&#xff08;ScheduledExecutorSe…

大語言模型驅動智能語音應答:技術演進與架構革新

在智能客服、電話銀行等場景中&#xff0c;用戶時常遇到這樣的困境&#xff1a;“請描述您的問題...抱歉沒聽清&#xff0c;請重試...正在為您轉接人工”。傳統語音應答&#xff08;IVR&#xff09;系統受限于規則引擎與淺層語義理解&#xff0c;難以應對復雜多變的自然語言表達…

【Linux】內存管理

要求&#xff1a;1、編寫程序&#xff0c;實現如下功能。&#xff08;1&#xff09;隨機生成 1000000 個 0~1 之間的數&#xff1b;&#xff08;2&#xff09;統計分析這些數據&#xff0c;計算均值、方差和分布情況&#xff0c;分布情況按0.01 的步長進行統計&#xff1b;&…

蒼穹外賣—day1

文章目錄前言一、接口文檔導入與生成二、前端環境搭建三、后端環境搭建1. 了解項目結構2. 環境搭建常見問題總結前言 &#xff08;簡要說明筆記的目的&#xff1a;記錄搭建過程、關鍵配置和結構理解&#xff09; 一、接口文檔導入與生成 Apifox 導入 使用工具&#xff1a;https…

基于微信小程序的在線疫苗預約小程序源碼+論文

基于微信小程序的在線疫苗預約系統源碼論文代碼可以查看文章末尾??聯系方式獲取&#xff0c;記得注明來意哦~&#x1f339; 分享萬套開題報告任務書答辯PPT模板 作者完整代碼目錄供你選擇&#xff1a; 《SpringBoot網站項目》800套 《SSM網站項目》1200套 《小程序項目》600套…

Windows 11 安裝過程中跳過微軟賬戶創建本地賬戶

背景 在 Windows 11 的安裝和設置過程中&#xff0c;Microsoft 賬號登錄是默認的認證方式。然而&#xff0c;在某些情況下&#xff0c;可能需要繞過此步驟以創建本地賬戶。 微軟在 2025 年 3 月推送的 Windows 11 預覽版&#xff08;Build 26120.3653 和 Build 26200.5516&am…

利用DBeaver實現異構數據庫數據定時任務同步

1、背景 本需求需要實現抽取KingBaseEs數據庫的某幾張表數據&#xff0c;定時同步到MySQL中 2、工具準備 2.1 DBeaverEE25.1(必須要企業版&#xff0c;如果用社區版沒有定時任務功能) https://dbeaver.io/download/ 2.2 KingBaseEs數據庫及驅動 https://www.kingbase.com…

【TCP/IP】1. 概述

1. 概述1. 概述1.1 因特網及技術催生新時代1.1.1 信息化時代1.1.2 關鍵技術1.1.3 國家戰略1.2 網絡互聯的動機和技術1.2.1 網絡互聯的動機1.2.2 網絡互聯技術1.3 因特網的形成和發展1.3.1 國際因特網發展軌跡1.3.2 中國互聯網發展1.4 有關因特網的組織機構1.5 請求注解&#xf…

中老年人的陪伴,貓咪與機器人玩具有什么區別?

在人口結構深度老齡化的背景下&#xff0c;中老年群體的精神需求與情感陪伴已成為重要的社會議題。貓咪作為活生生的伴侶動物&#xff0c;與日新月異的智能陪伴機器人&#xff0c;代表了兩種截然不同的情感慰藉路徑——前者承載著生命互動的溫度與責任&#xff0c;后者則彰顯了…

day11-微服務面試篇

微服務在面試時被問到的內容相對較少&#xff0c;常見的面試題如下&#xff1a;SpringCloud有哪些常用組件&#xff1f;分別是什么作用&#xff1f;服務注冊發現的基本流程是怎樣的&#xff1f;Eureka和Nacos有哪些區別&#xff1f;Nacos的分級存儲模型是什么意思&#xff1f;R…

昇騰 k8s vnpu配置

參考文檔: https://www.hiascend.com/document/detail/zh/mindx-dl/500/AVI/cpaug/cpaug_018.html 此文檔實現為NPU910B3卡 主機設置靜態虛擬npu 設置虛擬化模式 &#xff01;本命令只支持再物理機執行&#xff0c;取值為0或1&#xff0c;&#xff08;如果是在虛擬機內劃分vNPU…

Redis常用數據結構以及多并發場景下的使用分析:Set類型

文章目錄前言redis中的set結構疑問1 &#xff1a;為什么使用數組后 整體時間復雜度還是O(1)疑問2&#xff1a; set特性是無序的那為什么當元素少的時候 用連續數組 去存儲呢&#xff1f;疑問3&#xff1a;當元素少于512的時候即使用intset存儲的時候 是如何維護唯一性的&#x…

Linux中rw-rw-r--相關的訪問權限講解

下面就是關于 rw-rw-r-- 的知識圖譜式講解。核心節點&#xff1a;rw-rw-r-- (文件權限表示法) 這是一個在 Linux/Unix 操作系統中&#xff0c;通過 ls -l 命令查看到的&#xff0c;用于描述文件或目錄訪問權限的10字符字符串。分支一&#xff1a;字符串的解剖 (Anatomy of the …

C#異常處理:更優雅的方式

C#異常處理&#xff1a;更優雅的方式 在 C# 編程的世界里&#xff0c;異常處理是繞不開的重要環節。程序運行時難免會出現各種意外&#xff0c;若處理不當&#xff0c;可能導致程序崩潰&#xff0c;給用戶帶來糟糕體驗。所以&#xff0c;掌握更優雅的異常處理方式&#xff0c;對…

Qt6中模態與非模態對話框區別

一.阻塞 vs 非阻塞1.模態對話框阻塞父窗口&#xff1a;打開后&#xff0c;用戶必須先處理該對話框&#xff08;關閉或完成操作&#xff09;&#xff0c;才能繼續操作父窗口。應用場景&#xff1a;強制用戶立即響應的場景&#xff0c;如確認對話框、登錄窗口、文件選擇器等。2.非…

處理Web請求路徑參數

目錄 1. 路徑變量&#xff08;Path Variable&#xff09; 2. 查詢參數&#xff08;Query Parameter&#xff09; 3. 表單參數&#xff08;Form Data&#xff09; 4. 請求體JSON參數&#xff08;Request Body JSON&#xff09; 5. 請求頭參數&#xff08;Header Parameters&…

創客匠人:技術賦能下的創始人 IP 打造與內容創作新邏輯

在知識變現的浪潮中&#xff0c;創始人 IP 的核心競爭力始終圍繞內容展開&#xff0c;但內容創作的效率與質量往往成為瓶頸。創客匠人基于對行業的深刻洞察&#xff0c;探索出技術與內容融合的路徑&#xff0c;為創始人 IP 打造提供了新的思路 —— 不再將內容創作視為單純的輸…