leetcode第4题 求两个数组的中位数

2019-06-13  本文已影响0人  CoderAPang

@(LeetCode)[数组]

leetcode 4 Median of Two Sorted Arrays
描述:求两个数组的中位数
方法:设定两个“指针”i和j分别指向两个数组当前需要比较的位置。
边界讨论:
1、当其中一个数组为空时:直接计算
2、当两个数组都只有一个元素时:直接计算
3、当其中一个数组已经遍历完最后一个元素时:每次比较都将两个数组中较大的数置于此处,防止越界

class Solution {
    public double findMedianSortedArrays(int[] nums1, int[] nums2) {
      int m = nums1.length;
      int n = nums2.length;
      int midNumber1 = (m+n)%2==0?(m+n)/2:(m+n)/2+1;
      int midNumber2 = (m+n)/2+1;
        double ans = 0;
        
        if(m==1&&n==1){
            ans = (nums1[0]+nums2[0]);
            ans /=2;
            return ans;
            }
         if(m==0){
            ans=nums2[midNumber1-1]+nums2[midNumber2-1];
            ans /=2;
            return ans;
        }
        if(n==0){
            ans=nums1[midNumber1-1]+nums1[midNumber2-1];
            ans /=2;
            return ans;
        }
       int i=0,j=0;int num = 0;
        while(num<midNumber2){
            num++;
            
            if(num==midNumber1){ans =Math.min(nums1[i],nums2[j]);}
            if(num==midNumber2){ans +=Math.min(nums1[i],nums2[j]);}
            
            
            if(nums1[i] > nums2[j]){
                if(j==n-1){
                    int temp = nums2[j];
                    nums2[j] =nums1[i];
                    nums1[i]=temp;
                    i++;
                }else{j++;}
            }else{
                if(i==m-1){
                    int temp = nums2[j];
                    nums2[j] =nums1[i];
                    nums1[i]=temp;
                    j++;
                }else{
                i++;
                }
            }
        }
        ans =ans/2;
        return ans;
    }
}
上一篇下一篇

猜你喜欢

热点阅读