給定兩個大小為 m 和 n 的正序(從小到大)陣列 nums1 和 nums2。請你找出並返回這兩個正序陣列的中位數。
示例 :
輸入:nums1 = [1,3], nums2 = [2]
輸出:2.00000
解釋:合併陣列 = [1,2,3] ,中位數 2
分析題目:
題目主要分為兩步:合併陣列和找新陣列中的中位數
首先對於合併陣列,可以依次比較兩個陣列中的值,值較小的存入新陣列,並且該陣列指向下乙個元素。比如題目中的例子:最開始是nums1[0]和nums2[0]進行比較,nums1[0]較小,存入新陣列中,然後下一次迴圈nums1[1]與nums2[0]比較,nums2[0]較小,存入新陣列中,此時應該指向nums2[1],但nums2陣列只有乙個元素,如果指向nums2[1]會陣列溢位,所以此時要結束迴圈,但nums1陣列的元素還沒有都存入新陣列中,所以再寫乙個迴圈存剩下陣列的元素。
接下來尋找中位數就很簡單了,不再贅述。
#include
#include
double
findmediansortedarrays
(int
* nums1,
int nums1size,
int* nums2,
int nums2size)
else
if(nums1[m]
>nums2[n]
)else
}while
(m//合併陣列第二步:將另乙個陣列剩餘元素合併到新陣列中
if(n(length%2==
0)//如果陣列長度為偶數,取最中間兩數的平均值為中位數
answer=
(a[length/2-
1]+a[length/2]
)/2.0;
//不要忘了陣列從0開始
else
//否則取最中間元素為中位數
answer=a[length/2]
*1.0
;return answer;
}int
main()
;int nums2=
;int nums1size=
sizeof
(nums1)
/sizeof
(int);
//求陣列元素個數
int nums2size=
sizeof
(nums2)
/sizeof
(int);
printf
("%lf"
,findmediansortedarrays
(nums1,nums1size,nums2,nums2size));
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...