知识点

分治,归并排序

解题思路

先将两个数组根据大小放大一个新数组中,升序排序。如果一次遍历后,A数组没放完就放A数组,B数组没放完就放B数组。

排好序后,如果新数组长度为奇数,那么中位数就是n/2位置,否则就是n/2-1和n/2取和/2了。

Java题解

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param weightsA int整型一维数组 
     * @param weightsB int整型一维数组 
     * @return double浮点型
     */
    public double findMedianSortedArrays (int[] weightsA, int[] weightsB) {
        // write code here
        int n = weightsA.length, m = weightsB.length;
        int[] arr = new int[n + m];
        int i = 0, j = 0, l = 0;
        while(i < n && j < m){
            if(weightsA[i] > weightsB[j]){
                arr[l++] = weightsB[j++];
            } else {
                arr[l++] = weightsA[i++];
            }
        }
        while(i < n){
            arr[l++] = weightsA[i++];
        }
        while(j < m){
            arr[l++] = weightsB[j++];
        }
        int k = m + n;
        double ans = (k%2 == 1) ? arr[k / 2] : ((arr[k / 2 - 1] + arr[k / 2]) / 2);
        return ans;
    }
}