题目描述
There are two sorted arrays nums1 and nums2 of size m and n respectively.
Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).
You may assume nums1 and nums2 cannot be both empty.
Example 1:
nums1 = [1, 3]
nums2 = [2]
The median is 2.0
Example 2:
nums1 = [1, 2]
nums2 = [3, 4]
The median is (2 + 3)/2 = 2.5
思路
将两个数字有序合并,合并后数组长度为偶数,返回中间两位数的平均数;合并后数组长度为基数,返回最中间的数字。
java实现
class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int all[]=new int[nums1.length+nums2.length];//两个数组有序合并
int p1=0, p2=0, k=0; // p1为nums1索引 p2为nums2索引 k为all数组索引
while(p1 < nums1.length || p2 <nums2.length){
if(p1 >= nums1.length){ //nums1全部比较完
all[k++]=nums2[p2++];//将nums2依次赋值到all数组
}
else if(p2 >= nums2.length){//nums2全部比较完
all[k++]=nums1[p1++];//将nums1依次赋值到all数组
}
else if(nums1[p1]>nums2[p2]){ //nums2值小
all[k++]=nums2[p2++]; //将当前指针(索引为p2)nums1依次赋值到all数组
}
else {//nums1值小
all[k++]=nums1[p1++];//将当前指针(索引为p1)nums1依次赋值到all数组
}
}
if(all.length%2==0)//合并后数组长度为偶数,返回中间两位数的平均数
return (all[all.length/2-1]+all[all.length/2])/2.0;
else //合并后数组长度为基数,返回最中间的数字
return all[all.length/2];
}
}