兩個有序陣列如何求中位數呢?把兩個有序陣列排序?將兩個有序陣列排序的時間複雜度至少為\(o(m+n)\),不符合時間複雜度\(o(log(m+n))\)的要求。
本題需用到的兩個點:
由\(o(log(m+n))\)可知需要用二分法,
中位數的性質,小於中位數的數的數量和大於中位數的數的數量一樣多。
假如我們在陣列1中找到乙個切分點mid1
,同時由中位數的性質在陣列2中確定乙個切分點mid2
,若兩個切分點滿足:陣列1中mid1
左側的數+陣列2中mid2
左側的數均小於陣列1中mid1
右側的數+陣列2中mid2
右側的數,那麼這兩個切分點就成功將兩個陣列劃分為兩部分,兩部分數量相等,且其中一部分的數均小於另一部分,即可從中得到中位數。
只需要二分查詢較小的陣列,所以時間複雜度為\(o(\min(m,n))\)。
class solution }}
};
4 尋找兩個正序陣列的中位數
思路 我現在還沒有進行優化,大概就是合併陣列 參照之前的順序表合併 然後如果合併陣列的大小sum是偶數,返回sum 2和sum 2 1兩個元素除以二,如果sum是奇數則直接返回sum 2的元素 double findmediansortedarrays int nums1,int nums1size...
4 尋找兩個正序陣列的中位數
給定兩個大小為 m 和 n 的正序 從小到大 陣列nums1和nums2。請你找出這兩個正序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設nums1和nums2不會同時為空。示例 1 nums1 1,3 nums2 2 則中位數是 2.0示例 2 nums1 1,2 nu...
4 尋找兩個正序陣列的中位數
題目描述 給定兩個大小為 m 和 n 的正序 從小到大 陣列 nums1 和 nums2。請你找出這兩個正序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設 nums1 和 nums2 不會同時為空。示例 1 nums1 1,3 nums2 2 則中位數是 2.0 示例 2...