题解 | #牛的体重排序#
牛的体重排序
https://www.nowcoder.com/practice/1afd5afef2aa49a8a39b63bb9d2821f9
知识点
分治,归并排序
解题思路
先将两个数组根据大小放大一个新数组中,升序排序。如果一次遍历后,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; } }