題目:
給定兩個大小分別為 m 和 n 的正序(從小到大)陣列 nums1 和 nums2。請你找出並返回這兩個正序陣列的 中位數 。
演算法的時間複雜度應該為 o(log (m+n)) 。
思路:合併兩個陣列,排序,然後尋找中位數,很簡單很自然的思路;
演算法:
classsolution
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,去平均值即為中位數。
演算法:
classsolution
//判斷總數,計算中位數;
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...