4. 尋找正序數組的中位數

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

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

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

解題思路:
詳細的題解請參見https://leetcode.cn/problems/median-of-two-sorted-arrays/solutions/2950686/tu-jie-xun-xu-jian-jin-cong-shuang-zhi-z-p2gd

下面是我對題解的一些理解,我使用的是閉區間的寫法:
這道題的難點就在于時間復雜度要求,就限制了不能用遍歷來找到中位數。
中位數也就是有序數組中排在中間位置的數,換句話說中位數把有序數組分成了兩部分,兩部分的元素個數相同(如果數組元素個數是奇數,則讓左邊部分比右邊部分多一個),并且左邊部分的所有元素都比右邊部分的所有元素小(即是左邊部分的最大值都小于右邊部分的最小值)。

既然我們知道了m和n,自然也就知道了左邊部分和右邊部分的元素個數(m + n + 1)/ 2,那么假設左邊部分中的元素是由nums1中的i個元素+nums2中的j個元素組成,且i + j == (m + n + 1)/ 2,所以我們如果知道了i,自然也就知道了j,也就得到了左邊部分的元素和右邊部分的元素,也就是一種劃分情況,枚舉i的個數,也就得到不同的左右部分劃分情況,其中只有一個劃分情況能夠滿足左邊部分的最大值小于右邊部分的最小值,此時也就找到了中位數,如果數組元素個數是奇數,中位數=左邊部分的最大值,如果是偶數,則中位數=(左邊部分最大值 + 右邊部分最小值)/ 2。

滿足條件的劃分是唯一的,并且此時的 i 是滿足nums1[i] <= nums2[j + 1]的最大值,而這個i我們可以通過二分的方法來查找。

class Solution {public double findMedianSortedArrays(int[] nums1, int[] nums2) {// 1、如果nums1的長度大于nums2,則交換if(nums1.length > nums2.length){int[] temp = nums1;nums1 = nums2;nums2 = temp;}// 2、二分尋找最大滿足nums1[i] < nums2[j + 1]int m = nums1.length, n = nums2.length;int left = 0, right = m - 1;while(left <= right){int i = left + (right - left) / 2;int j = (m + n + 1) / 2 - (i + 1) - 1;if(nums1[i] < nums2[j + 1]){left = i + 1;}else{right = i - 1;}}int i = right;int j = (m + n + 1) / 2 - (i + 1) - 1;int ai = i >= 0 ? nums1[i] : Integer.MIN_VALUE;int bj = j >= 0 ? nums2[j] : Integer.MIN_VALUE;int ai1 = (i + 1) < m ? nums1[i + 1] : Integer.MAX_VALUE;int bj1 = (j + 1) < n ? nums2[j + 1] : Integer.MAX_VALUE;int max1 = Math.max(ai, bj);int min2 = Math.min(ai1, bj1);return (m + n) % 2 > 0 ? max1 : (max1 + min2) / 2.0;}
}

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

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

相關文章

DeepSeek飛機大戰小游戲HTML5(附源碼)

用DeepSeek幫忙生成的飛機大戰小游戲網頁版&#xff0c;基于HTML5。 提示詞prompt 幫我做一個網頁版的飛機大戰游戲 html5的游戲功能說明 玩家控制&#xff1a; 使用鍵盤方向鍵或WASD移動飛機 空格鍵發射子彈 移動設備支持觸摸控制 游戲機制&#xff1a; 敵機會從屏幕頂部隨機位…

全素山藥開發指南:從防癢處理到高可用食譜架構

摘要&#xff1a;本文系統性解析山藥的化學特性&#xff08;黏液蛋白/皂苷致癢機制&#xff09;及全素場景下的烹飪解決方案&#xff0c;提供6種高內聚低耦合的食譜實現&#xff0c;附完整防氧化與黏液控制技術方案。一、核心問題分析&#xff1a;山藥處理中的“痛點”致癢物質…

OpenLayers 入門指南:序言

本專欄旨在幫助零GIS基礎的開發人員系統掌握OpenLayers這一強大的開源Web地圖庫&#xff0c;通過 “理論實戰” 結合的方式&#xff0c;逐步實現從創建地圖到構建一個基礎地圖應用模版。無論你是前端開發者、GIS愛好者&#xff0c;都可以通過此專欄零基礎開始用OpenLayers開發一…

WebRTC輕量學習 libdatachannel

最近想了解一些在瀏覽器中推送音視頻流&#xff0c;尋找很多版本的代碼&#xff0c;C、Go、Python等語言實現的webRTC協議。 按照搭建難度和快速實現首選Python版本的WebRTC&#xff0c;這種是最適合原型開發的。 選型&#xff1a;C的開源庫libdatachannel Python的開源庫Ai…

Vue2中的keep-alive:組件狀態緩存與性能優化實戰指南

目錄 一、什么是keep-alive&#xff1f; 與普通組件切換的對比 二、核心用法詳解 1. 基礎用法&#xff1a;動態組件緩存 2. 路由視圖緩存 3. 生命周期鉤子 三、進階配置與優化 1. 精準控制緩存組件 &#xff08;1&#xff09;include/exclude屬性 &#xff08;2&…

FastAPI安全加固:密鑰輪換、限流策略與安全頭部如何實現三重防護?

url: /posts/f96ba438de34dc197fd2598f91ae133d/ title: FastAPI安全加固:密鑰輪換、限流策略與安全頭部如何實現三重防護? date: 2025-07-02T22:05:04+08:00 lastmod: 2025-07-02T22:05:04+08:00 author: cmdragon summary: FastAPI框架安全加固方案包括密鑰輪換自動化、請…

NeighborGeo:基于鄰居的IP地理定位(五)

NeighborGeo:基于neighbors的IP地理定位 X. Wang, D. Zhao, X. Liu, Z. Zhang, T. Zhao, NeighborGeo: IP geolocation based on neighbors, Comput. Netw. 257 (2025) 110896, 5. Case analysis 為了說明NeighborGeo在優化圖結構和利用鄰居信息進行預測方面的優勢,將目標I…

Ethernet IP與Profinet共舞:網關驅動綠色工業的智慧脈動

Ethernet IP與Profinet共舞&#xff1a;驅動綠色工業的智慧脈動 光伏建筑一體化&#xff0c;建筑碳中和&#xff0c;在全球氣候變化、國家碳達峰碳中和戰略大背景下&#xff0c;敬畏生活、生產與自然和諧共處&#xff0c;確立自身資源循環高效利用的倒計時和路線圖。 在全球氣…

衡石科技破解指標管理技術難題:語義層建模如何實現業務與技術語言對齊?

在數字化轉型的深水區&#xff0c;企業指標管理體系普遍面臨一個核心矛盾&#xff1a;業務部門需要敏捷的數據洞察支撐決策&#xff0c;而IT部門卻受困于復雜的數據架構和冗長的需求響應周期。這種矛盾的本質&#xff0c;是傳統指標管理體系中“技術語言”與“業務語言”的割裂…

正品庫拍照PWA應用的實現與性能優化|得物技術

一、 背景與難點 背景 目前得物ERP主要鑒別流程&#xff0c;是通過鑒別師鑒別提需到倉庫&#xff0c;倉庫庫工去進行商品補圖拍照&#xff0c;現有正品庫59%的人力投入在線下商品借取/歸還業務的操作端&#xff0c;目前&#xff0c;線下借取的方式會占用商品資源&#xff0c…

如何使用python識別出文件夾中全是圖片合成的的PDF,并將其移動到指定文件夾

引言 在現代數字化工作流程中&#xff0c;無論是為機器學習模型處理數據&#xff0c;還是進行數字歸檔&#xff0c;區分原生文本 PDF&#xff08;例如&#xff0c;由文字處理器生成的報告&#xff09;和基于圖像的 PDF&#xff08;例如&#xff0c;掃描的發票、檔案文件&#…

淘系怎么做?

首先&#xff0c;要明確一點就是&#xff0c;補單不是“刷/單”&#xff0c;補單是為了給買家營造一個良好的購物氛圍&#xff0c;畢竟再好的產品沒有排名、沒有權重&#xff0c;買家根本都沒有機會看到你的產品&#xff0c;而且只有讓淘寶感覺的產品有扶持必要它才會給你對應的…

網安系列【6】之[特殊字符] SQL注入揭秘:從入門到防御實戰指南

文章目錄一 真實案例二 SQL注入三 為什么危害堪比核彈&#xff1f;四 深入解剖攻擊原理&#x1f3af; 4.1&#xff1a;探測SQL漏洞的存在&#x1f3af; 4.2&#xff1a;數據庫信息探測&#x1f3af; 4.3&#xff1a;數據庫信息探測&#x1f3af; 4.4&#xff1a;數據庫信息進一…

Windows內核并發優化

Windows內核并發優化通過多層次技術手段提升多核環境下的系統性能&#xff0c;以下是關鍵技術實現方案&#xff1a; 一、內核鎖機制優化? 精細化鎖策略? 采用自旋鎖&#xff08;Spinlock&#xff09;替代信號量處理短臨界區&#xff0c;減少線程切換開銷 對共享資源實施讀…

【數據結構】 排序算法

【數據結構】 排序算法 一、排序1.1 排序是什么&#xff1f;1.2 排序的應用1.3 常見排序算法二、常見排序算法的實現2.1 插入排序2.1.1 直接插入排序2.1.2 希爾排序2.2 選擇排序2.2.1 直接選擇排序2.2.1.1 方法12.2.1.1 方法22.2.2 堆排序&#xff08;數組形式&#xff09;2.3 …

NumPy-核心函數np.matmul()深入解析

NumPy-核心函數np.matmul深入解析 一、矩陣乘法的本質與np.matmul()的設計目標1. 數學定義&#xff1a;從二維到多維的擴展2. 設計目標 二、np.matmul()核心語法與參數解析函數簽名核心特性 三、多維場景下的核心運算邏輯1. 二維矩陣乘法&#xff1a;基礎用法2. 一維向量與二維…

突破政務文檔理解瓶頸:基于多模態大模型的智能解析系統詳解

重磅推薦專欄&#xff1a; 《大模型AIGC》 《課程大綱》 《知識星球》 本專欄致力于探索和討論當今最前沿的技術趨勢和應用領域&#xff0c;包括但不限于ChatGPT、DeepSeek、Stable Diffusion等。我們將深入研究大型模型的開發和應用&#xff0c;以及與之相關的人工智能生成內容…

深入探討支持向量機(SVM)在乳腺癌X光片分類中的應用及實現

?? 博主簡介:CSDN博客專家、CSDN平臺優質創作者,高級開發工程師,數學專業,10年以上C/C++, C#, Java等多種編程語言開發經驗,擁有高級工程師證書;擅長C/C++、C#等開發語言,熟悉Java常用開發技術,能熟練應用常用數據庫SQL server,Oracle,mysql,postgresql等進行開發應用…

九、K8s污點和容忍

九、K8s污點和容忍 文章目錄九、K8s污點和容忍1、污點&#xff08;Taint&#xff09;和容忍&#xff08;Toleration&#xff09;1.1 什么是污點&#xff08;Taint&#xff09;&#xff1f;1.2 什么是容忍&#xff08;Toleration&#xff09;&#xff1f;1.3 污點的影響效果&…

基于開源AI智能名片鏈動2+1模式S2B2C商城小程序的超級文化符號構建路徑研究

摘要&#xff1a;在數字技術重構文化傳播生態的背景下&#xff0c;超級文化符號的塑造已突破傳統IP運營框架。本文以開源AI智能名片鏈動21模式與S2B2C商城小程序的融合創新為切入點&#xff0c;結合"嶼光生活"體驗館、快手燒烤攤主等典型案例&#xff0c;提出"技…