栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

一时间没有想到比较好的优化方法,所以只能采用暴力法

class Solution {

    public double findMedianSortedArrays(int[] nums1, int[] nums2) {

        double m = 0.0;

        List num1 = new ArrayList<>();

        List num2 = new ArrayList<>();

        for (int i = 0; i < nums1.length; i++) {

            num1.add(nums1[i]);

        }

        for (int i = 0; i < nums2.length; i++) {

            num2.add(nums2[i]);

        }

        if ((!num1.isEmpty()) && (!num2.isEmpty())){

            for (int i = 0; i < num2.size(); i++) {

                int j=0;

                while (num2.get(i) >= num1.get(j)){

                    j++;

                    if (j == num1.size()){

                        break;

                    }

                }

                num1.add(0);

                if (j != num1.size()){

                    for (int k = num1.size()-1; k > j; k--) {

                        num1.set(k, num1.get(k-1));

                    }

                }

                num1.set(j, num2.get(i));

            }

        }else {

            if (num1.isEmpty()){

                num1.addAll(num2);

            }

        }

        if (num1.size() % 2 == 0){

            m = ((double)num1.get(num1.size()/2-1)+num1.get(num1.size()/2))/2;

        }else {

            m = num1.get(num1.size()/2);

        }

        return m;

    }

}

问题:

1.虽然结果通过了,但是时间复杂度过高

2.而且方法的输入一开始没看到是数组类型的,结果自己选择了链表的数据结构

标准答案:

二分搜索

每次二分搜索时都可以删除掉一部分数据,最终剩下来的就是第k小的数,即中位数

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/314898.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号