Leetcode随缘刷题之寻找两个正序数组的中位数

我一上来没读清题,想着这题这么简单,直接就上手写了:

package leetcode.day_12_05;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

public class FindMedianSortedArrays0004 {

    public List<Integer> listOf(int[] array) {
        List<Integer> result = new ArrayList<>();
        for (int i : array) {
            result.add(i);
        }
        return result;
    }

    public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        double middle = 0.0;
        List<Integer> l1 = listOf(nums1);
        List<Integer> l2 = listOf(nums2);
        l2.addAll(l1);
        l2.sort(Comparator.comparingInt(a -> a));
        if (l2.size() % 2 == 0) {
            middle = ((double) l2.get(l2.size() / 2) + (double) l2.get(l2.size() / 2 - 1)) / 2;
        } else {
            middle = (double) l2.get(l2.size() / 2);
        }
        return middle;
    }
}

Leetcode随缘刷题之寻找两个正序数组的中位数
虽然是通过了,但是在我又看一遍题目之后,才发现难点所在。
本题要求时间复杂度控制在O(log(m+n)),而我使用了排序算法就肯定不行了。
因为Arrays.sort时间复杂度是O(nlogn),光是这就超了。
于是我又想出第二种法:
package leetcode.day_12_05;

public class FindMedianSortedArrays0004_02 {

    public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        int l1 = nums1.length;
        int l2 = nums2.length;

        int[] num = new int[l1 + l2];

        int i = 0;

        int j = 0;

        int n = 0;

        while (i < l1 && j < l2) {
            if (nums1[i] < nums2[j]) {
                num[n] = nums1[i++];
            } else {
                num[n] = nums2[j++];
            }
            n++;
        }

        if (i < l1) {
            for (int a = i; a < l1; a++) {
                num[n++] = nums1[a];
            }
        } else {
            for (int a = j; a < l2; a++) {
                num[n++] = nums2[a];
            }
        }

        if (num.length % 2 == 0) {
            return ((double) num[num.length / 2] + (double) num[num.length / 2 - 1]) / 2;
        } else {
            return num[num.length / 2];
        }
    }

    public static void main(String[] args) {
        int[] nums1 = {1, 3};
        int[] nums2 = {2, 5};
        System.out.println(new FindMedianSortedArrays0004_02().findMedianSortedArrays(nums1, nums2));
    }
}

Leetcode随缘刷题之寻找两个正序数组的中位数
相比于第一种虽然是快了不少,但是时间复杂度还是不够,这次的是O(m+n)。目前这能在先这样了。
欢迎评论区大神指点。

Original: https://www.cnblogs.com/soberw/p/15876461.html
Author: soberw-
Title: Leetcode随缘刷题之寻找两个正序数组的中位数

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/579956/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 老生常谈系列之Aop–CGLIB动态代理的底层实现原理

    老生常谈系列之Aop–CGLIB动态代理的底层实现原理 前言 上一篇老生常谈系列之Aop–JDK动态代理的底层实现原理简单讲解了JDK动态代理的实现,动态代…

    Java 2023年6月8日
    0118
  • Spring5新特性—Log4j2

    Spring5新特性—Log4j2 Spring5新特性—Log4j2 创建一个Maven项目,导入依赖 org.apache.logging.log4j log4j-core 2…

    Java 2023年6月5日
    074
  • Kubernetes-Service

    1. 简介 kubernets service 是将运行一组pods上的应用程序公开为网络服务的抽象方法。 有了 kubernets service,你就无需修改应用程序即可使用服…

    Java 2023年6月7日
    080
  • SpringBoot 整合Swagger2 踩坑记录

    SpringBoot 整合Swagger2 踩坑记录 Failed to start bean ‘documentationPluginsBootstrapper&#8…

    Java 2023年6月5日
    095
  • JAVA入门基础_从零开始的培训_JUC

    1、线程基础知识复习 从start一个线程说起 多线程中相关的一些概念 进程、线程、管程 并行与并发 用户线程与守护线程 2、CompletableFuture Future接口(…

    Java 2023年6月9日
    0119
  • Spring Authorization Server授权服务器入门

    11月8日Spring官方已经强烈建议使用 Spring Authorization Server替换已经过时的Spring Security OAuth2.0,距离 Spring…

    Java 2023年5月30日
    097
  • Mybatis中jdbcType和javaType的对应关系

    JDBC Type Java Type 2 CHAR String 3 VARCHAR String 4 LONGVARCHAR String 5 NUMERIC java.mat…

    Java 2023年5月29日
    0121
  • Java两种核心机制

    1.Java虚拟机 2.垃圾回收 posted @2017-02-26 23:13 Big_Foot 阅读(250 ) 评论() 编辑 Original: https://www….

    Java 2023年5月29日
    086
  • Java 将Excel转为XML

    可扩展标记语言(XML)文件是一种标准的文本文件,它使用特定的标记来描述文档的结构以及其他特性。通常,我们可以通过格式转换的方式来得到XML格式的文件。本文,将通过Java代码介绍…

    Java 2023年5月29日
    063
  • 从上下文中获取所有的原生controller

    1 /** 2 * 获取项目所有被注解修饰的url 3 * @param run 4 */ 5 public void getAllUrl(ConfigurableApplicat…

    Java 2023年6月6日
    088
  • v-if判断是否包含字符串

    csharp;gutter:true;删除 signature:祸兮福所倚,福兮祸所伏 Original: https://www.cnblogs.com/xnuuuu/p/132…

    Java 2023年6月9日
    081
  • Android-Java-普通类与抽象类(覆盖)&方法重载

    执行结果: 覆盖,复写,重写的规则: 返回值 方法名 参数类型与数量 必须一致,并且,子类的修饰权限要大于等于父类(父类public 子类public 👌,父类protected …

    Java 2023年5月29日
    0103
  • 科学计算与可视化————-

    一,读书笔记 Matplotlib matplotlib是Python优秀的数据可视化第三方库matplotlib库的效果可参考http://matplotlib.org/gall…

    Java 2023年6月6日
    0113
  • 中小企业的福音来咯!JNPF渐火,助力业务数字化升级

    引言 随着大数据时代的到来,企业业务数字管理越来越受到企业管理人员的重视。而企业如果想要实现数字化管理的话,就需要有拥有一套能够将各环节业务相串联起来的数字化平台应用系统。以此实现…

    Java 2023年6月5日
    078
  • Spring Security静态资源过滤(11)

    在一个实际项目中,并非所有的请求都需要经过Spring Security过滤器,有一些特殊的请求,例如静态资源等,一般来说并不需要经过Spring Security过滤器链,用户如…

    Java 2023年6月13日
    069
  • 斗地主游戏的案例开发

    关于java后端的斗地主游戏开发案例(只实现后端部分) 斗地主游戏的案例开发 业务需求分析: 斗地主的做牌, 洗牌, 发牌, 排序(拓展知识), 看牌。业务: 总共有54张牌。点数…

    Java 2023年6月6日
    073
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球