leetcode 4 尋找有序陣列的中位數

2021-10-02 16:50:45 字數 1129 閱讀 9435

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

if(start2 >= len2)

else

}int count = result.

size()

;if(count %2==

1)else

return-1

;}};

求有序陣列的中位數可以轉換成求第k大個數的問題。

具體參見

leetcode 4. 題解

每次從陣列中排除k/2個必定不是中位數的元素,演算法的時間複雜度為o(l

ogk)

o(logk)

o(logk

)因為k∼(

m+n)

k \sim (m + n)

k∼(m+n

),所以演算法的時間複雜度滿足題目需求。

空間複雜度o(1

)o(1)

o(1)

屬於尾遞迴。

class

solution

}double

merge_find

(int beg_1,

int end_1,vector<

int>

& nums1,

int beg_2,

int end_2,vector<

int>

& nums2,

int k)

else

else}}

};

LeetCode 4 兩組有序陣列尋找中位數

題目參見尋找兩個正序陣列的中位數。思路來自leetcode的官方題解。尋找兩個正序陣列的中位數 給定兩個大小為 m 和 n 的正序 從小到大 陣列 nums1 和nums2。請你找出並返回這兩個正序陣列的中位數。如果是奇數,則返回第 m n 1 2小的數字,如果是偶數,則返回第 m n 2小的數和第...

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

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

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

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