题目描述
python解法
class Solution:
def get_kth(self, nums1, nums2, k):
# print(nums1, nums2, 'k=', k)
m, n = len(nums1), len(nums2)
if m == 0: return nums2[k-1]
if n == 0: return nums1[k-1]
if k == 1: return min(nums1[0], nums2[0])
drop1, drop2 = min(k//2, m), min(k//2, n) # 丢弃个数
# print('m={},n={},k/2={},drop1={},drop2={}'.format(m,n,k//2,drop1,drop2))
if nums1[drop1-1] <= nums2[drop2-1]: # 丢弃nums1部分
return self.get_kth(nums1[drop1:m], nums2, k-drop1)
else:
return self.get_kth(nums1, nums2[drop2:n], k-drop2)
def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
m, n = len(nums1), len(nums2)
# 整合奇偶数情况
mid_left = self.get_kth(nums1, nums2, (m+n+1)//2)
mid_right = self.get_kth(nums1, nums2, (m+n+2)//2)
return (mid_left+mid_right)/2
JavaScript解法
var findMedianSortedArrays = function(nums1, nums2) {
var num = [];
nums1.concat(nums2)
num = nums1.concat(nums2);
num.sort(comparenumbers);
if (num.length % 2 == 1)
return num[(num.length - 1) / 2];
else
return (num[num.length / 2 - 1] + num[num.length / 2]) / 2;
};
function comparenumbers(a,b){
return a-b;
}
C++解法
运用归并的思想来完成n + m 的时间复杂度。
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
int len1=nums1.size();
int len2=nums2.size();
int k1=len1+len2;
int k=(len1+len2)>>1;
vector<int> num;
int temp1=0,temp2=0;
while(temp1<=len1-1||temp2<=len2-1){
if(temp2>=len2||(temp1<=len1-1&&nums1[temp1]<=nums2[temp2])){
num.push_back(nums1[temp1]);
temp1++;
}else{
num.push_back(nums2[temp2]);
temp2++;
}
if(num.size()>=k+1) break;
}
double ans;
int s=num.size();
if(k1%2){
ans=(double)num[s-1];
}else{
ans=((double)num[s-1]+(double)num[s-2])/2.0;
}
return ans;
}
};