题目描述:给定两个有序数组,求这两个数组的中位数。
中位数:顾名思义就是最中间位置的值,
设两个数组长度之和为length。
如果两个数组长度之和是偶数,那么返回值是(num[length/2-1]+num[length/2])/2。
如果两个数组长度之和是奇数,那么返回值是num[length/2]。
以下是解法
class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
//计算两个数组的总长度
int length=nums1.length+nums2.length;
//计算中间位置的下标
int half=length/2;
//获取下起始值
int out=nums1.length!=0?nums1[0]:nums2[0];
//上一个位置的的值,是为了计算length%2==0的情况
int preOut=0;
//两个数组的起始下标
int i=0,j=0;
for(int k=0 ; k <= half ; k++){
//保存上一个值
preOut=out;
//判断下两个数组当前位置的大小,值小的数组下标往前进一位
//边界判断:这里要考虑数组下标是不是已经越界
if(j >= nums2.length || (i < nums1.length && nums1[i] <= nums2[j]) ){
out=nums1[i++];
}else{
out=nums2[j++];
}
}
//根据length%2==0的情况,计算返回值
return length%2==0 ? (double)(preOut+out)/2 : out;
}
}