leetcode实践:找出两个有序数组的中位数

  • 题目

给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。
请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。

  • 代码实现
package com.ddc.learn;

import java.util.Arrays;

/**
 * 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。
 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。
 */
public class FindMedianSortedArrays {

    /**
     * 先合并再排序,然后奇数取中间值,偶数取中间两个值的平均数...
     * @param nums1
     * @param nums2
     * @return
     */
    public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        int[] merge = new int[nums1.length + nums2.length];
        System.arraycopy(nums1, 0, merge, 0, nums1.length);
        System.arraycopy(nums2,0,merge, nums1.length, nums2.length);
        Arrays.sort(merge);

        System.out.println(Arrays.toString(merge));
        if (merge.length % 2 == 1) {
            return merge[merge.length/2];
        } else {
            double p = merge[merge.length/2];
            return (p + merge[merge.length/2 - 1])/2;
        }
    }

    public static void main(String[] args) {
        int[] nums1 = {1,2};
        int[] nums2 = {3,4};

        double out = new FindMedianSortedArrays().findMedianSortedArrays(nums1, nums2);
        System.out.println(out);
    }
}

猜你喜欢

转载自www.cnblogs.com/gouyg/p/leetcode-FindMedianSortedArrays.html