尋找兩個正序陣列的中位數問題,方法一:合併陣列檢索法
題目:
給定兩個大小為 m 和 n 的正序(從小到大)陣列 nums1 和 nums2。請你找出並返回這兩個正序陣列的中位數。
示例 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
示例 3:
輸入:nums1 = [0,0], nums2 = [0,0]
輸出:0.00000
示例 4:
輸入:nums1 = [], nums2 = [1]
輸出:1.00000
示例 5:
輸入:nums1 = [2], nums2 = []
輸出:2.00000
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/median-of-two-sorted-arrays
分析:
本題是一個陣列和中位數的問題,最容易想到的就是先合併兩個陣列,然後在合併的陣列中尋找到中位數。這裡注意一點,他這裡的數雖然都是整數,但是結果可能是有小數的(兩個中間數的情況取平均值),如果是int向下取整可能出錯,最好強轉一下(num1 + num2)/ 2.0來獲得浮點數結果。
程式碼:
class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
//建立新陣列
int[] a = new int[nums1.length + nums2.length];
//i,j,k分別是nums1,nums2,a的遊標指示變數
int i, j, k;
i = j = k = 0;
//將兩個陣列合併到新陣列中,歸併放入,利用他已經排好了序的屬性
while(i < nums1.length && j < nums2.length){
if(nums1[i] < nums2[j]){
a[k ++] = nums1[i ++];
}else{
a[k ++] = nums2[j ++];
}
}
//將剩下的也放入陣列中
while(i < nums1.length) a[k ++] = nums1[i ++];
while(j < nums2.length) a[k ++] = nums2[j ++];
//找出中位數
if((k % 2) == 1){
return a[k/2];
}else{
//注意這裡可能是小數,要轉換
return (a[k/2] + a[k/2 - 1]) / 2.0;
}
}
}
分析:
該演算法的時間複雜度是O(m+n),空間複雜度是O(m+n),思路比較直接,但還有待優化的地方,比如說這裡面的合併陣列是必須得到的嗎?可以不得到陣列而直接求出中位數嗎?
相關文章
- 尋找兩個正序陣列中的中位數陣列
- 4. 尋找兩個正序陣列的中位數陣列
- 力扣演算法題:尋找兩個正序陣列的中位數力扣演算法陣列
- 尋找兩個有序陣列的中位數陣列
- GO實現:leetcode之尋找兩個正序陣列的中位數GoLeetCode陣列
- 【LeetCode Hot 100】4. 尋找兩個正序陣列的中位數LeetCode陣列
- LeetCode第4題:尋找兩個有序陣列的中位數LeetCode陣列
- LeetCode--尋找兩個有序陣列的中位數(05)LeetCode陣列
- 用 PHP 在 力扣 刷演算法 [尋找兩個正序陣列的中位數]{有空就更}PHP力扣演算法陣列
- leetcode 4. Median of Two Sorted Arrays 尋找兩個正序陣列的中位數(困難)LeetCode陣列
- 兩個有序陣列如何合併成一個有序陣列陣列
- 將兩個有序陣列合併為一個有序陣列陣列
- [LeetCode 刷題] 4. 尋找兩個有序陣列的中位數 (Hard)LeetCode陣列
- 在陣列中尋找和為指定值的兩個數陣列
- 尋找陣列中和為定值的兩個數陣列
- 合併兩個有序陣列陣列
- LeetCode解題(C++)-4. 尋找兩個有序陣列的中位數LeetCodeC++陣列
- 兩個有序陣列的中位數陣列
- js如何合併兩個陣列JS陣列
- 88、合併兩個有序陣列陣列
- js合併兩個陣列物件JS陣列物件
- (七)一個尋找陣列中眾數的演算法陣列演算法
- 找一個陣列中特別的數陣列
- 88. 合併兩個有序陣列陣列
- 4. 兩個排序陣列的中位數排序陣列
- 演算法-兩個排序陣列的中位數演算法排序陣列
- 給定兩個大小為 m 和 n 的正序(從小到大)陣列 nums1 和 nums2。請你找出並返回這兩個正序陣列的中位數。陣列
- 【Java】尋找陣列中“主要元素”Java陣列
- 【.Net】從字串陣列中尋找數字的元素字串陣列
- LeetCode每日一題:合併兩個有序陣列(No.88)LeetCode每日一題陣列
- 合併陣列陣列
- 尋找陣列的中心索引陣列索引
- LeetCode-兩個排序陣列的中位數LeetCode排序陣列
- [Python手撕]兩個升序陣列的中位數Python陣列
- 編寫一個函式,實現兩個整型陣列的合併(將兩個整型陣列a和b合併成一個從小到大有序排列的整形陣列c,並在主函式中測試)。函式陣列
- 18.合併兩個有序陣列(簡單)陣列
- jQuery合併兩個陣列程式碼例項jQuery陣列
- js合併兩個陣列程式碼例項JS陣列