力扣4题:寻找两个正序数组的中位数

【题目描述】

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

题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

【解题代码】

public static double findMedianSortedArrays(int[] nums1, int[] nums2) {int len1 = nums1.length;int len2 = nums2.length;// 采用归并比较算法,因为只需要取中位数,所以新建数组大小nums只需要nums1和nums2一半即可int len3 = (len1 + len2) / 2 + 1;int[] nums = new int[len3];int i1 = 0, i2 = 0, j = 0;// 采用归并比较算法,向数组nums按大小依次从nums1和nums2拷贝数据// 一直到nums1和nums2其中之一遍历完毕,或者新建数组已经塞满while (true) {if (i1 >= len1 || i2 >= len2 || j >= len3) break;if (nums1[i1] < nums2[i2]) {nums[j++] = nums1[i1++];} else {nums[j++] = nums2[i2++];}}// 如果新建数组还未塞满,则从未遍历完的数组中直接拷贝数据把新建数组塞满     if (j < len3) {if (i1 < len1) System.arraycopy(nums1, i1, nums, j, len3 - j);if (i2 < len2) System.arraycopy(nums2, i2, nums, j, len3 - j);}// nums1和nums2之和为偶数,则返回中间两数之和的平均数    if (((len1 + len2)) % 2 == 0) return (nums[len3 - 2] + nums[len3 - 1]) / 2.0;// nums1和nums2之和为奇数,则直接返回中间数    elsereturn nums[len3 - 1];
}

【解题步骤】

  1. 拿到题目可知,此算法可以用归并算法进行处理,因为只需要取中位数,所以新建数组大小nums只需要nums1和nums2一半即可 nums2[i2++];
     int len1 = nums1.length;int len2 = nums2.length;// 采用归并比较算法,因为只需要取中位数,所以新建数组大小nums只需要nums1和nums2一半即可int len3 = (len1 + len2) / 2 + 1;int[] nums = new int[len3];
  2. 采用归并比较算法,向数组nums按大小依次从nums1和nums2拷贝数据,一直到nums1和nums2其中之一遍历完毕,或者新建数组已经塞满
    while (true) {if (i1 >= len1 || i2 >= len2 || j >= len3) break;if (nums1[i1] < nums2[i2]) {nums[j++] = nums1[i1++];} else {nums[j++] = nums2[i2++];}
    }
  3. 如果新建数组还未塞满,则从未遍历完的数组中直接拷贝数据把新建数组塞满
    if (j < len3) {if (i1 < len1) System.arraycopy(nums1, i1, nums, j, len3 - j);if (i2 < len2) System.arraycopy(nums2, i2, nums, j, len3 - j);
    }
  4. 根据nums1和nums2之和为奇数还是偶数,返回相应的结果
     // nums1和nums2之和为偶数,则返回中间两数之和的平均数if (((len1 + len2)) % 2 == 0)return (nums[len3 - 2] + nums[len3 - 1]) / 2.0;
    // nums1和nums2之和为奇数,则直接返回中间数
    elsereturn nums[len3 - 1];

【思路总结】

  1. 归并算法是数据结构排序算法中一个很重要的算法, 归并排序非常稳定,时间复杂度始终都是 N*logN,另外除了常规的数组排序之外,很多场景都可以应用到,比如笔者以前做过的远程和本地文件夹同步算法,就是两边文件名称数组,进行归并比较处理,大家要掌握这个算法思路以及应用技巧;
  2. 算法应用中,要根据实际情况进行改良,比如在这里因为是取中位数,因此不需要向普通的场景申请两个数组之和的空间,而只需要取一半即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/703469.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sql实战_基于某推荐比值问题

将一个月内某PL对应的MBLX出现的最高的频次的占比值最大的值统计出来&#xff0c;并且还要把XHLX&#xff0c;MBLX字段添加上作为最终的推荐字段 Select * from(select *,row_number( ) over (partition by PL order by 占比最大值 desc ) rn from 表) where rn 1&#xff1b…

TensorRT及CUDA自学笔记003 NVCC及其命令行参数

TensorRT及CUDA自学笔记003 NVCC及其命令行参数 各位大佬&#xff0c;这是我的自学笔记&#xff0c;如有错误请指正&#xff0c;也欢迎在评论区学习交流&#xff0c;谢谢&#xff01; NVCC是一种编译器&#xff0c;基于一些命令行参数可以将使用PTX或C语言编写的代码编译成可…

H5多用途的产品介绍展示单页HTML5静态网页模板

H5多用途的产品介绍展示单页HTML5静态网页模板 源码介绍&#xff1a;一款H5自适应多用途的产品介绍展示单页HTML静态网页模板&#xff0c;可用于团队官网、产品官网。 下载地址&#xff1a; https://www.changyouzuhao.cn/13534.html

24-树-完全二叉树的节点个数

这是树的第24篇算法&#xff0c;力扣链接。 给你一棵 完全二叉树 的根节点 root &#xff0c;求出该树的节点个数。 完全二叉树 的定义如下&#xff1a;在完全二叉树中&#xff0c;除了最底层节点可能没填满外&#xff0c;其余每层节点数都达到最大值&#xff0c;并且最下面一层…

Selenium自动化测试:提升效果的关键技巧

在软件开发过程中&#xff0c;自动化测试是提高效率和质量的重要手段。而Selenium作为一个广泛使用的自动化测试工具&#xff0c;为开发者提供了强大的功能和灵活性。本文将介绍Selenium的概念&#xff0c;并分享一些提升自动化测试效果的关键技巧。 什么是Selenium&#xff1…

HarmonyOS应用开发者基础认证 模拟考试 题库

模拟考试 1.在Colum和Row容器组件中&#xff0c;justifycontent用于设置子组件在主轴方向上的对齐格式&#xff0c;alignItems用于设置子组件在交叉抽方向上的对齐格式。 正确(True) 2.Video组件可以支持本地视频路径和网络路径播放。播放网络视频时&#xff0c;需要申请权限oh…

Intel SGX 概述

文章目录 前言一、SGX介绍1.1 指令介绍1.2 数据结构 二、内存保护过程2.1 enclave页面缓存&#xff08;EPC&#xff09;2.2 Enclave页面缓存映射&#xff08;EPCM&#xff09; 参考资料 前言 SGX是Intel开发的新的处理器技术&#xff0c;可以在计算平台上提供一个可信的空间&a…

AI智能分析网关V4智慧工厂视频智能监管与风险预警平台建设方案

一、背景需求分析 1&#xff09;随着信息技术的迅猛发展和制造业竞争的加剧&#xff0c;智慧工厂成为了推动制造业转型升级的重要引擎。智慧工厂解决方案通过整合物联网、人工智能、大数据分析等先进技术&#xff0c;实现生产过程的智能化、自动化和高效化&#xff0c;为企业提…

python 基础知识点(蓝桥杯python科目个人复习计划52)

今日复习内容&#xff1a;还是做题 例题1&#xff1a;四元组问题 问题描述&#xff1a; 从小学开始&#xff0c;小明就是一个非常喜欢数学的孩子。他喜欢用数学的方式解决各种问题。在他的高中时期&#xff0c;他遇到了一个非常有趣的问题&#xff0c;那就算给定一个长度为n…

openslide Could not find module ‘libopenslide-0.dll‘

本文仅对与在win操作系统下的用户&#xff0c;在openslide官网中下载对应的二进制文件&#xff0c;然后使用pip安装 pip install openslide-python 解压二进制文件&#xff0c;把bin目录下的所有文件复制粘贴到python环境中就行&#xff0c;例如我使用的环境是anaconda的base…

Day41|动态规划3

整数拆分 思路分析&#xff1a; 1.dp[i]的含义是分拆数字i之后&#xff0c;得到的最大乘积为dp[i]. 2.确定递推公式 拆分出的数可能为2个&#xff0c;或两个以上。 拆分结果必定是小于这个数本身&#xff0c;最小为1。 j从1开始遍历&#xff0c;拆分出的数字逐渐变大&…

Android java中内部类的使用

一.成员内部类 实验1&#xff1a;成员内部类 class Outer {private int a 10;class Inner {public void printInfo(){System.out.println("a "a);}}}public class InnerDemo {public static void main(String args[]) {Outer o new Outer();Outer.Inner i o.new…

K8S节点GPU虚拟化(vGPU)

vGPU实现方案 4paradigm提供了k8s-device-plugin,该插件基于NVIDIA官方插件(NVIDIA/k8s-device-plugin),在保留官方功能的基础上,实现了对物理GPU进行切分,并对显存和计算单元进行限制,从而模拟出多张小的vGPU卡。在k8s集群中,基于这些切分后的vGPU进行调度,使不同的容器…

数据结构--双向链表专题

目录 1. 双向链表的结构2. 实现双向链表预先的准备初始化尾插、头插尾删、头删查找在pos位置之后插⼊数据删除pos位置的数据 3. 顺序表和双向链表的分析 1. 双向链表的结构 注意&#xff1a;这里的“带头”跟前面我们说的“头结点”是两个概念&#xff0c;为了更好的理解直接称…

期权Delta动态对冲成本计算—基于效用的Whalley-Wilmott 方法

Whally 和 Wilmott方法 交易员通常采用 Whally 和 Wilmott 的渐近解&#xff0c;这种方法计算起来比较简单&#xff0c;在实际操作中有非常广泛的应用。 Whally 和 Wilmott&#xff08;1997&#xff09;假设交易成本很小&#xff0c;那么就可以得到 HN 方法的渐进解法&#xf…

Spring Security源码学习

Spring Security本质是一个过滤器链 过滤器链本质是责任链设计模型 1. HttpSecurity 【第五篇】深入理解HttpSecurity的设计-腾讯云开发者社区-腾讯云 在以前spring security也是采用xml配置的方式&#xff0c;在<http>标签中配置http请求相关的配置&#xff0c;如用户…

OLED创新产品:49寸OLED透明屏展示柜

49寸透明屏展示柜是一种采用OLED透明屏技术的展示设备&#xff0c;具有透明特性和高清显示效果。它通常用于商店、展厅、博物馆等场所&#xff0c;用于展示商品、艺术品、文物等物品。 这种展示柜的特点是可以将展品放置在透明的OLED屏幕上&#xff0c;使得展品仿佛悬浮在空中&…

【Java笔记】01 概述

【Java笔记】01 概述 一、java特性 1.面向对象的&#xff08;oop) 2.健壮的&#xff0c;由强制类型机制、异常处理、垃圾的自动收集等保证 3.跨平台性的&#xff0c;一个编译好的class文件可在多个操作系统下运行 4.解释性的 解释性&#xff1a;编译后的代码&#xff0c;不能直…

C++基础知识(四:类的学习)

类 类指的就是对同一类对象&#xff0c;把所有的属性都封装起来&#xff0c;你也可以把类看成一个高级版的结构体。 【1】定义 class 类名 { 访问权限:成员属性; 访问权限:成员方法; }访问权限&#xff1a; public:共有的&#xff0c;类内、类外和子类中都可以访问 private:私有…

【AIGC大模型】跑通wonder3D (windows)

论文链接&#xff1a;https://arxiv.org/pdf/2310.15008.pdf windows10系统 显卡&#xff1a;NVIDIA rtx 2060 一、安装anaconda 二、安装CUDA 11.7 (CUDA Toolkit 11.7 Downloads | NVIDIA Developer) 和 cudnn 8.9.7(cuDNN Archive | NVIDIA Developer)库 CUDA选择自定…