LeetCode_4——寻找两个有序数组的中位数

题目

给定两个大小为 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

解法一

思路

  在不考虑时间复杂度的情况下

步骤

  1. 首先将nums1,nums2放在同一个数组中进行排序
  2. 再将数组进行排序
  3. 若是奇数,则默认中位数位中间数,偶数则两数之商
public static  double findMedianSortedArrays(int[] nums1, int[] nums2) {
        double num=0;

         //将nums1和nums2放入数组arrs中
        int length=nums1.length+nums2.length;
        int[] arrs=new int[length];

        for (int i=0;i <nums1.length ; i++) {
            arrs[i]=nums1[i];
        }

        int a;
        int b;
        int c=arrs.length-nums1.length;
        for(a=1, b=0;a<=c&&b<nums2.length;a++,b++) {
            int d=arrs.length-a;
            arrs[d]=nums2[b];
        }

        for (int i=0;i<arrs.length;i++){
            for (int j=i+1;j<arrs.length;j++){
                if (arrs[i] > arrs[j]){
                    int tmp = arrs[i];
                    arrs[i] = arrs[j];
                    arrs[j] = tmp;
                }
            }
        }
    
        int index=arrs.length/2;
        //取中位数
        if(arrs.length%2==0){
            //取余得0则为偶数
            num=(double) (arrs[index]+arrs[index-1])/2;
            System.out.println(arrs[index]+"+"+arrs[index-1]);
        }else {
            num=(double) arrs[index];
            System.out.println(arrs[index]);
        }
        return  num;
    }    

 

posted @ 2019-06-12 14:33  echola_mendes  阅读(368)  评论(0编辑  收藏  举报