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

2021-10-07 00:14:24 字數 854 閱讀 3195

給定兩個大小為 m 和 n 的正序(從小到大)陣列 nums1 和 nums2。

請你找出這兩個正序陣列的中位數,並且要求演算法的時間複雜度為 o(log(m + n))。

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

示例 1:

nums1 =

[1, 3]

nums2 =

[2]

則中位數是2.0

示例 2:

nums1 =

[1, 2]

nums2 =

[3, 4]

則中位數是(2 + 3)/2 = 2.5

class

solution

else

return

find

(nums1,

0,nums2,

0,sum/2+

1);//奇數情況,返回中間的數

}int

find

(vector<

int>

&nums1,

int i,vector<

int>

&nums2,

int j,

int k)

int si=

min(

(int

)i+k/2,

int(nums1.

size()

)),sj=j+k-k/2;

if(nums1[si-1]

>nums2[sj-1]

)else}}

;

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

參考題解 題解 給定兩個大小為 m 和 n 的正序 從小到大 陣列 nums1 和 nums2。請你找出這兩個正序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設 nums1 和 nums2 不會同時為空。示例 1 nums1 1,3 nums2 2 則中位數是 2.0 示...

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

原題目 思路 如果某乙個陣列的長度為零,直接返回另外乙個陣列的中位數,否則 用雙指標法將兩個陣列合併為乙個陣列 o n m 然後返回該陣列的中位數。class solution else if n 0 else int count 0,i 0,j 0 vectors n m while iwhile...

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

題目要求的時間複雜度是log m n 如果不對時間複雜度做要求可以使用雙指針對陣列進行遍歷即可。我們把這個題轉換成查詢第k小整數,解題思路如下 首先宣告,下面的思路非常值得反覆複習。假設我們要找第 7 小的數字。我們比較兩個陣列的第 k 2 個數字,如果 k 是奇數,向下取整。也就是比較第 3 個數...