leetcode練習4(求兩個正序陣列中位數)

2021-10-07 08:54:17 字數 1113 閱讀 3870

題目:給定兩個大小為 m 和 n 的正序(從小到大陣列 nums1 和 nums2,請你找出這兩個正序陣列的中位數

你可以假設 nums1 和 nums2 不會同時為空。

題解(1):如果要求時間複雜度為o(log(m+n)),可以想到的就是二分法。(時間複雜度:o(log(m+n))

class

solution

double

find()

}if(mid <0)

while

(a.size()

< mid + starta +1)

if(a[mid+starta]

> b[mid+startb]

)//防止容器越界

else

} res = res -mid-1;

}if(end ==0)

//若陣列中的總元素個數為奇數,返回中間數

if(end ==1)

//若陣列的總元素個數為偶數,返回中間兩數的平均值}}

;

題解(2):類似於視窗滑動,設定乙個指標m指向較長陣列a的第k個數(中位數的位置),設定另乙個指標n指向較短陣列b的開頭(b[0]之前),進行比較,若a[m]>=b[n+1],則指標m向前移動乙個位置,n向後移動乙個位置,以此來逼近中位數。(時間複雜度:o(n))

class

solution

double

find()

while

(enda+

1< a.

size()

&&endb>-1

)else}if

((a.

size()

+ b.

size()

)%2==

1)return b[endb];}

else

if(endb ==0)

return

(double)(

((double

)b[endb]+(

double

)max

(b[endb -1]

, a[enda]))

/2);

}}};

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...