美文网首页
2020-09-01 寻找两个正序数组的中位数

2020-09-01 寻找两个正序数组的中位数

作者: Coder_L | 来源:发表于2020-09-01 09:20 被阅读0次

题目:

给定两个大小为 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;

}

相关文章

网友评论

      本文标题:2020-09-01 寻找两个正序数组的中位数

      本文链接:https://www.haomeiwen.com/subject/aqbmsktx.html