寻找两个正序数组的中位数

题目:

给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。
请你找出这两个正序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。
你可以假设 nums1 和 nums2 不会同时为空。

  • 示例 1:
    nums1 = [1, 3]
    nums2 = [2]
    则中位数是 2.0
  • 示例 2:
    nums1 = [1, 2]
    nums2 = [3, 4]
    则中位数是 (2 + 3)/2 = 2.5

思路:

将数组元素合并到list,对list排序取中间元素

方法:

public static double findMedianSortedArrays(int[] nums1, int[] nums2) {
    double result;
    // 将两个数组元素装进list
    List list =new ArrayList<>();
    for (int i : nums1) {
        list.add(i);
    }
    for (int i : nums2) {
        list.add(i);
    }
    // 对list元素排序
    List collect = list.stream().sorted().collect(Collectors.toList());
    // 判断list元素个数是奇数还是偶数,奇数直接取中间元素,偶数取中间两元素取平均值
    int size = collect.size();
    if (size %2 ==0) {
        int a = collect.get(size /2 -1);
        int b = collect.get(size /2);
        result = (a + b) /2.0;
    }else {
        int index = (size +1) /2 -1;
        result = collect.get(index);
    }
    return result;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。