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

2021-10-18 23:48:27 字數 1383 閱讀 3987

給定兩個大小為 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...