Leetcode第四题 两个数组的中位数

174 阅读1分钟

题目描述:给定两个有序数组,求这两个数组的中位数。

中位数:顾名思义就是最中间位置的值,

设两个数组长度之和为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;
    }
        
}