給定兩個大小分別為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
從兩個正序陣列中找出中位數,很明顯的會想到將兩個陣列進行合併,然後在合併後的正序陣列中找出中位數。中位數取決於兩個陣列的長度和,和為奇數直接取中間的數,和為偶數則取中間兩數的平均值。
源程式:
/*
問題:尋找兩個正序陣列的中位數
*/#include
#include
#include
using
namespace std;
class
solution
if(index2 == n)
if(k ==1)
// 正常情況
int newindex1 =
min(index1 + k /2-
1, m -1)
;int newindex2 =
min(index2 + k /2-
1, n -1)
;int pivot1 = nums1[newindex1]
;int pivot2 = nums2[newindex2];if
(pivot1 <= pivot2)
else}}
//尋找中位數的函式
double
findmediansortedarrays
(vector<
int>
& nums1, vector<
int>
& nums2)
else}}
;int
main
(int argc,
char
*ar**)
; vector<
int>nums2 =
; solution s;
double res = s.
findmediansortedarrays
(nums1,nums2)
; cout << res;
return0;
}
執行結果:
leetcode4 尋找兩個正序陣列的中位數
參考題解 題解 給定兩個大小為 m 和 n 的正序 從小到大 陣列 nums1 和 nums2。請你找出這兩個正序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設 nums1 和 nums2 不會同時為空。示例 1 nums1 1,3 nums2 2 則中位數是 2.0 示...
LeetCode 4 尋找兩個正序陣列的中位數
給定兩個大小為 m 和 n 的正序 從小到大 陣列 nums1 和 nums2。請你找出這兩個正序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設 nums1 和 nums2 不會同時為空。示例 1 nums1 1,3 nums2 2 則中位數是2.0 示例 2 nums1...
LeetCode 4 尋找兩個正序陣列的中位數
原題目 思路 如果某乙個陣列的長度為零,直接返回另外乙個陣列的中位數,否則 用雙指標法將兩個陣列合併為乙個陣列 o n m 然後返回該陣列的中位數。class solution else if n 0 else int count 0,i 0,j 0 vectors n m while iwhile...