问题描述:
给定两个大小为 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
解题思路:先来自己的,新建数组长度等于nums1和nums2的总和,然后从头遍历两个子数组,按顺序插入到新数组里,最后取新数组的中位数。
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int m = nums1.length;
int n = nums2.length;
int[] nums = new int[m+n];
if(m==0){
if(n%2==0){
return ((double)nums2[n/2]+(double) nums2[n/2-1])/2;
}else{
return (double)nums2[n/2];
}
}
if(n==0){
if(m%2==0){
return ((double)nums1[m/2]+(double) nums1[m/2-1])/2;
}else{
return (double)nums1[m/2];
}
}
for(int i=0,j=0,k=0;i<m&&j<n;){
if(nums1[i]<=nums2[j]){
nums[k++]=nums1[i++];
if(i==m){
while(j<n){
nums[k++]=nums2[j++];
}
}
}else{
nums[k++]=nums2[j++];
if(j==n){
while(i<m){
nums[k++]=nums1[i++];
}
}
}
}
if(nums.length%2==0){
return ((double)nums[nums.length/2]+(double)nums[nums.length/2-1])/2;
}else{
return (double)nums[nums.length/2];
}
}
官方解法 有点复杂 恕在下 不想看了