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數組

解法一

思路

  在不考慮時間複雜度的狀況下spa

步驟

  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;
    }    
相關文章
相關標籤/搜索