知识点
分治,归并排序
解题思路
先将两个数组根据大小放大一个新数组中,升序排序。如果一次遍历后,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;
}
}



京公网安备 11010502036488号