当前位置: 代码迷 >> 综合 >> (java)给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的中位数 。
  详细解决方案

(java)给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的中位数 。

热度:46   发布时间:2023-12-22 20:33:48.0

给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的中位数 。

思路

1.合并这两个有序序列,并排序
2.判断合并后的有序序列是奇数还是偶数序列
3.求相应的中位数

public class FindMedianSortedArrays {
    public double findMedianSortedArrays(int[] nums1, int[] nums2) {
    //将两个数组合并成一个有序的数组FindMedianSortedArrays arrays = new FindMedianSortedArrays();int[] res = arrays.sortedArrays(nums1, nums2);//判断数组的长度是奇数还是偶数int length = res.length;boolean bool = isOddNumber(length);System.out.println(bool);//是偶数的话//1 2 3 4//0 1 2 3//计算中位数double result = bool == true ? res[(0 + res.length - 1) / 2] :(res[(0 + res.length - 1) / 2] + res[(0 + res.length - 1) / 2 + 1]) / 2.0;return result;}public static void main(String[] args) {
    int[] m = new int[]{
    1, 3, 5};int[] n = new int[]{
    2, 4, 9};FindMedianSortedArrays arrays = new FindMedianSortedArrays();
// int[] res = arrays.sortedArrays(m, n);
// for (int r : res) {
    
// System.out.println(r);
// }double res = arrays.findMedianSortedArrays(m, n);System.out.println(res);}public int[] sortedArrays(int[] m, int[] n) {
    int[] res = new int[m.length + n.length];//结果数组的下标int rIndex = 0;//m数组下标int mIndex = 0;//n数组下标int nIndex = 0;while (mIndex < m.length && nIndex < n.length) {
    if (m[mIndex] <= n[nIndex]) {
    res[rIndex] = m[mIndex];mIndex++;} else {
    res[rIndex] = n[nIndex];nIndex++;}rIndex++;}//判断数组是否遍历完成//n数组已经遍历完成,则只需要将m数组剩下的元素加到res数组中if (mIndex != m.length) {
    for (int i = mIndex; i < m.length; i++) {
    res[rIndex] = m[i];rIndex++;}} else {
    //m数组已经遍历完成,则将n数组剩下的元素加到res数组中for (int i = nIndex; i < n.length; i++) {
    res[rIndex] = n[i];rIndex++;}}return res;}/*** 判断奇数还是偶数*/public boolean isOddNumber(int i) {
    //return i % 2 != 0;return ((i & 1) == 1) ? true : false;}
}
  相关解决方案