難度:困難。
直接合併兩個陣列後進行快排。
class
solution
intpartition
(vector<
int>
& nums,
int left,
int right)
swap
(nums, left, j)
;return j;
}void
quicksort
(vector<
int>
& nums,
int left,
int right)
}void
printvector
(vector<
int>
& nums)
}double
findmediansortedarrays
(vector<
int>
& nums1, vector<
int>
& nums2)
else
}// printvector(nums);
int len = nums.
size()
;if(len ==1)
return nums[0]
;quicksort
(nums,
0, len -1)
;// printvector(nums);
double mid =
0.0;
if(len %2)
else
return mid;}}
;
稍微簡化一丟丟,將快排改為尋找第k大元素
class
solution
intpartition
(vector<
int>
& nums,
int left,
int right)
swap
(nums, left, j)
;return j;
}int
kthselect
(vector<
int>
& nums,
int left,
int right,
int k)
else
return
kthselect
(nums, q +
1, right, k - j);}
void
printvector
(vector<
int>
& nums)
}double
findmediansortedarrays
(vector<
int>
& nums1, vector<
int>
& nums2)
else
}int len = nums.
size()
;if(len ==1)
return nums[0]
;double mid =
0.0;
if(len %2)
else
return mid;}}
;
分析歸納後得出解法
將問題轉換為一般問題:尋找兩個有序陣列的第k大數字。
找出兩個陣列a和b中的第k個數字,分別為a和b,比較兩者:
如果a > b,則第
k大數字在陣列a的前半段或陣列b的後半段;
如果a < b, 則第k大數字在陣列a的後半段或陣列b的前半段。
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,...
LeetCode4 尋找兩個有序陣列的中位數
給定兩個大小為 m 和 n 的有序陣列nums1和nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設nums1和nums2不會同時為空。示例 1 nums1 1,3 nums2 2 則中位數是 2.0示例 2 nums1 1,2 nums2 3,...