Java算法練習題,每天進步一點點(2)

題目描述

尋找兩個正序數組的中位數

難度:困難

給定兩個大小分別為 m 和 n 的正序(從小到大)數組 nums1 和 nums2。請你找出並返回這兩個正序數組的 中位數 。

示例 1:

輸入:nums1 = [1,3], nums2 = [2]

輸出:2.00000

解釋:合並數組 = [1,2,3] ,中位數 2

示例 2:

輸入:nums1 = [1,2], nums2 = [3,4]

輸出:2.50000

解釋:合並數組 = [1,2,3,4] ,中位數 (2 + 3) / 2 = 2.5

示例 3:

輸入:nums1 = [0,0], nums2 = [0,0]

輸出:0.00000

示例 4:

輸入:nums1 = [], nums2 = [1]

輸出:1.00000

示例 5:

輸入:nums1 = [2], nums2 = []

輸出:2.00000

提示:

nums1.length == m

nums2.length == n

0 <= m <= 1000

0 <= n <= 1000

1 <= m + n <= 2000

-106 <= nums1[i], nums2[i] <= 106

解題思路

題目大意: 就是求中位數,如果數組有奇數個那就是求中間那個數即可,如果公有偶數個,那就是中間兩個數的平均值。

解題思路:
有時候簡單的思路往往可以解決問題,我們隻需要在new一個長度為兩個數組長度之和的空數組,然後把兩個數組都放進去,然後sort一下,嗯沒錯直接sort就行,然後排好序後,就直接求出中間下標,判斷下數組長度是不是偶數個,在分別處理即可

代碼

/**
 * Keafmd
 *
 * @ClassName: FindTheMedianOfTwoPositivelyOrderedArrays
 * @Description: 尋找兩個正序數組的中位數
 * @author: 牛哄哄的柯南
 * @date: 2021-07-22 18:22
 */
 class Solution {
    public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        int l1 = nums1.length;
        int l2 = nums2.length;
        int[] num = new int[l1+l2];
        int i=0,j=0;
        int k=0;
        double res =0;
        while(i<l1){
            num[k++] = nums1[i++];
        }
        while(j<l2){
            num[k++] = nums2[j++];
        }
        Arrays.sort(num);
        int sum_len = l1+l2;
        int mid = sum_len/2;
        if(sum_len%2==0){
            res = (num[mid]+num[mid-1])/2.0;
        }else{
            res = num[mid];
        }
        return res;
    }
}

總結

本篇文章就到這裡瞭,希望能給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!

推薦閱讀: