4 尋找兩個有序陣列的中位數

2022-09-23 10:54:09 字數 915 閱讀 2047

題目:

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

演算法的時間複雜度應該為 o(log (m+n)) 。

思路:合併兩個陣列,排序,然後尋找中位數,很簡單很自然的思路;

演算法:

class

solution

else

return (double)(nums1[nums1.size()/2

]); }

};

執行結果:

執行用時:12 ms, 在所有 c++ 提交中擊敗了99.27%的使用者

記憶體消耗:87.2 mb, 在所有 c++ 提交中擊敗了29.01%的使用者

通過測試用例:2094 / 2094

方法二:雙指標法

思路:我並不需要合併陣列,只需要找到(m+n)/2這個數,為奇數的話,便直接為偶數。值為偶數的話,還需要找到(m+n)/2+1,去平均值即為中位數。

演算法:

class

solution

//判斷總數,計算中位數;

if((n+m)%2==0)

//為奇數個,中位值直接為第(m+m)/2+1個數;

else

return

0;

}};

程式做出了很多判斷,主要是防止陣列越界,對部分判斷語句做了優化改為三目運算子 ? :  但是依舊有很多判斷,好處是沒有運用庫,用基本的運算子實現了演算法,切僅有乙個迴圈。時間複雜度為(m+n)/2

執行用時:32 ms, 在所有 c++ 提交中擊敗了43.51%的使用者  //  多次執行時間變化很大,不作參考

記憶體消耗:86.8 mb, 在所有 c++ 提交中擊敗了76.96%的使用者

通過測試用例:2094 / 2094

4 尋找兩個有序陣列的中位數

給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設 nums1 和 nums2 不會同時為空。示例 1 nums1 1,3 nums2 2 則中位數是 2.0 示例 2 nums1 1,2 ...

4 尋找兩個有序陣列的中位數( )

給定兩個大小為 m 和 n 的有序陣列nums1和nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設nums1和nums2不會同時為空。示例 1 nums1 1,3 nums2 2 則中位數是 2.0 示例 2 nums1 1,2 nums2 3...

4 尋找兩個有序陣列的中位數

給定兩個大小為 m 和 n 的有序陣列nums1和nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設nums1和nums2不會同時為空。示例 1 nums1 1,3 nums2 2 則中位數是 2.0 示例 2 nums1 1,2 nums2 3...