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