leetcode-题号4. 寻找两个正序数组的中位数

4.寻找两个正序数组的中位数 python 要找到两个正序数组的中位数,并且要求时间复杂度为 (O(\log(m+n))),可以使用二分查找的方法。通过这种方法,我们可以在 (O(\log(m+n))) 的时间复杂度内找到两个正序数组的中位数。解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5。输入:nums1 = [1,2], nums2 = [3,4]输入:nums1 = [1,3], nums2 = [2]算法的时间复杂度应该为 O(log (m+n))。解释:合并数组 = [1,2,3] ,中位数 2。 阅读详情

题目:

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

算法的时间复杂度应该为 O(log (m+n)) 。

示例 1:

输入:nums1 = [1,3], nums2 = [2]
输出:2.00000
解释:合并数组 = [1,2,3] ,中位数 2
示例 2:

输入:nums1 = [1,2], nums2 = [3,4]
输出:2.50000
解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/median-of-two-sorted-arrays
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

看到这题,我想起之前做过的三个升序数组找距离最短的三个数,可以用一个for循环处理,循环长度为三数组长度之和。于是有了思路,循环得到一个新的升序数组,然后找中位数就简单了。于是有了如下代码,代码是可行,不过效率不大行。

/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number}
 */
var findMedianSortedArrays = function(nums1, nums2) {
    let total = nums1.length + nums2.length
    let center = Math.floor(total/2) + 1
    // 是否奇数
    let flag = total % 2
    let j=0
    let k=0
    let arr = []
    for (let i = 0; i < (nums1.length + nums2.length); i++) {
        if(nums1.length === 0) {
            arr = nums2
            break
        }
        if(nums2.length === 0) {
            arr = nums1
            break
        }
        if(nums1[j] > nums2[k]) {
            if (k < nums2.length) {
                arr.push(nums2[k])
                k++
                // k++
            } else if (j < nums1.length)  {
                arr.push(nums1[j])
                j++ 
            }
        } else {
            if (j < nums1.length) {
                arr.push(nums1[j])
                j++ 
                // j++
            } else if (k < nums2.length) {
                arr.push(nums2[k])
                k++ 
                // k++    
            }
            // arr.push(nums1[k])
            // j++
        }
    }
    console.log(arr)
    if (flag) {
            return arr[center-1]
    } else {
        return (arr[center-1] + arr[center-2])/2
    }
};

在这里插入图片描述
然后我又想到使用js自带的函数sort也是可以实现的,因为可以直接排好序。代码如下,效率也不行。

/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number}
 */
var findMedianSortedArrays = function(nums1, nums2) {
    let arr = [...nums1, ...nums2].sort((a,b) => a>b ? -1 : 1)
    console.log(arr)
    let tmp = Math.floor(arr.length/2)
    if(arr.length%2) {
        return arr[tmp]
    } else {
        return (arr[tmp] + arr[tmp-1])/2
    }
};

在这里插入图片描述

【Leetcode】4. 寻找两个正序数组的中位数 给定两个大小分别为m和n的正序(从小到大)数组nums1和nums2。请你找出并返回这两个正序数组的中位数。算法的时间复杂度应该为Ologmn))。输入:nums1 = [1,3], nums2 = [2]输出:2.00000解释:合并数组 = [1,2,3] ,中位数 2输入:nums1 = [1,2], nums2 = [3,4]输出:2.50000解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5nu。 阅读详情

相关推荐

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

条件说明该怎么调nums1左边太多(或太大)i要往左缩,(else 情况)nums1左边太少(或太小)i要往右扩,满足找到了合法划分直接 return 中位数。

985小菜鸡 1204

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

文章目录题目一、归并算法二、二分查找法 题目 给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的中位数。 进阶:你能设计一个时间复杂度为 O(log (m+n)) 的算法解决此问题吗? 示例 1: 输入:nums1 = [1,3], nums2 = [2] 输出:2.00000 解释:合并数组 = [1,2,3] ,中位数2 示例 2: 输入:nums1 = [1,2], nums2 = [3,4] 输出:2.50000 解释:合并数组 =

m0_51801058的博客 8817

LeetCode-4.寻找两个正序数组的中位数 C++实现

给定两个大小分别为m和n的正序(从小到大)数组nums1和nums2。请你找出并返回这两个正序数组的。算法的时间复杂度应该为。2.00000合并数组 = [1,2,3] ,中位数 22.50000合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5。

2401_86645122的博客 2044

算法—4、寻找两个正序数组的中位数

给定两个大小分别为和的正序(从小到大)数组和,找出并返回这两个正序数组的 中位数

^@Hu@^的博客 1226

LeetCode 4. 寻找两个正序数组的中位数(执行用时: 20 ms , 在所有 C++ 提交中击败了 94.05% 的用户)

给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (m+n)) 。 示例 1: 输入:nums1 = [1,3], nums2 = [2] 输出:2.00000 解释:合并数组 = [1,2,3] ,中位数 2 示例 2: 输入:nums1 = [1,2], nums2 = [3,4] 输出:2.50000 解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5

我不是码农的博客~~~ 633

[Vue][面试]谈谈你对MVC、MVP和MVVM的理解

谈谈你对MVC、MVP和MVVM的理解 答题思路:此题涉及知识点很多,很难说清楚,说透彻,因为MVC,MVP这些我们前端程序员自己甚至都没用过。但是恰恰反映了前端这些年从无到有, 从有到优的变迁过程,因此沿此思路回答将十分清除。 Web1.0时代 在web1.0时代,并没有前端的概念。开发一个web应用多数采用ASP.NET/Java/PHP编写,项目通常由多个aspx/jsp/php文件构成,每个文件中同时包含了HTML、CSS、JavaScript、C#/Java/PHP代码, 系统整体架构可能如下图所

你好,欢迎光临! 723

给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (m+n)) 。 示例 1

给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数。解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5。输入:nums1 = [1,2], nums2 = [3,4]输入:nums1 = [1,3], nums2 = [2]算法的时间复杂度应该为 O(log (m+n))。解释:合并数组 = [1,2,3] ,中位数 2。输出:2.00000。输出:2.50000。

酸奶公园 1412

可视化工具--Plotly

随着信息技术的发展和硬件设备成本的降低,当今的互联网存在海量的数据,要想快速从这些数据中获取更多有效的信息,数据可视化是重要的一环。对于Python语言来说,比较传统的数据可视化模块是Matplotlib,但它存在不够美观、静态性、不易分享等缺点,限制了Python在数据可视化方面的发展。   为了解决这个问题,新型的动态可视化开源模块Plotly应运而生。由于Plotly具有动态、美观、易用、种类丰富等特性,所以一经问世就受到开发人员的喜爱。

YFater的博客 1万+

#LeetCode刷题——4. 寻找两个正序数组的中位数

在这个内卷的世界,有的人卷成了麻花,有的人却选择了躺平,毕竟只要我自己躺下就没人能把我打倒。

YZG ' BLOG 626

Python自动化神器:OP插件64位版从安装到实战(附雷电模拟器截图技巧)

本文详细介绍了Python自动化神器OP插件64位版的安装与实战应用,包括环境搭建、窗口控制、鼠标键盘模拟等核心功能。特别针对雷电模拟器提供了最小化截图技术和OCR识别优化方案,帮助开发者高效实现Windows自动化任务。

weixin_29094539的博客 330

为何LPDDR4支持on-die ECC,但是DDR4却不支持呢?

DRAM的ECC,目前的编码方式都是128bit data,产生8bit parity或者ECC code. 而且必须要128bit才行。这8bit的ECC code是要被写入到DRAM内存里面的,从而read的时候,可以读取这8bit ECC code来判定read data是否有错,如果是SBF,就可以纠错了,如果是double bit,大部分时候是可以detect到错误,即所谓的SEC(Single Error Correct) + DED(Double Error Detect).

一个DRAM从业者的告白 1555

《LeetCode 热题 HOT 100》——寻找两个正序数组的中位数

《LeetCode 热题 HOT 100》——寻找两个正序数组的中位数详解

m0_56069910的博客 8879

Miniforge3部署教程,完美替代Anaconda3

大背景不介绍了,哎!直接上教程!

zzy_ucas的博客 1万+

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

Leetcode 4. 寻找两个正序数组的中位数1、问题分析2、问题解决3、总结 1、问题分析 题目链接:https://leetcode-cn.com/problems/median-of-two-sorted-arrays/submissions/ 具体思路是: 1、 根据两个数组的总长度计算是否是 奇数还是偶数, 2、然后和两个链表合并的思路类似   代码我已经进行了详细的注释,理解应该没有问题,读者可以作为参考,如果看不懂(可以多看几遍),欢迎留言哦!我看到会解答一下。 2、问题解决   笔者以

珍惜 1万+

FAST-LIVO2 源码精读(一):系统总览——从 LIO 到 LIVO 的多传感器融合架构

本文是「FAST-LIVO2 激光-惯性-视觉里程计源码精读」专栏的开篇。全专栏共 18 篇,锚定香港大学 MaRS 实验室 2025 年 1 月开源的官方代码,逐模块剖析这套登上 T-RO’24 的多传感器融合系统。开篇先建立全局认知:FAST-LIVO2 所要解决的问题、整体框架的构成,以及源码主线的数据流动。

PX4-SLAM-PNC 589

StarRocks 面试题及参考答案详解(万字详解)

Broker Load的过程通常涉及到数据的解析、转换和加载,它支持多种数据格式,并且可以处理复杂的数据导入任务。一方面,压缩可以减少磁盘I/O操作,因为压缩后的数据占用的空间更小,需要读取的数据块数量也就更少。在StarRocks中,表数据可以被划分成多个分区,每个分区包含表的一部分数据。在传统的行存储模型中,数据是按行组织的,这意味着在执行分析查询时,系统需要读取并处理整行数据,即使很多时候只需要查询其中的少数几列。物化视图的更新可以是完全重算,也可以是增量更新,取决于物化视图的定义和数据变更的模式。

大模型大数据攻城狮的专栏 2076

4. 寻找两个正序数组的中位数-LeetCode(Java)

寻找两个正序数组的中位数-LeetCode(Java)   ​ 寻找两个正序数组的中位数-LeetCode(Java) 题目:4. 寻找两个正序数组的中位数 给定两 分析:     1.暴力解法      (1)思路:      (2)代码:     2.进阶:归并排序      (1)思路:      (2)代码:     3.二分查找      (1)思路:      (2)代码      4.划分数组      (1)思路:      (2)代码

m0_60416689的博客 1615

【银河麒麟桌面系统】自定义ISO镜像操作实践

本文详细介绍了麒麟操作系统Kylin-Desktop-V10-SP1的ISO镜像定制流程。通过挂载原始镜像、解压文件系统、进入chroot环境进行系统定制(包括文件替换和软件管理),最终重构squashfs并生成新ISO。关键步骤包括:挂载镜像到mnt目录、解压filesystem.squashfs、替换源配置文件、在chroot环境中清理系统、重新生成squashfs文件以及使用mkisofs命令创建新镜像。文章特别标注了x86和ARM架构的不同命令参数,并提供了安装测试验证方法。整个过程展示了从原始镜像

信创运维工程师 · 银河麒麟 & 容器实战 | 金融生产环境迁移·等保加固 | 142篇原创·17万+阅读 2339

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

个元素一定是小于我们目标值的,因此可以排除这一段(如上图中灰色部分),在剩余元素中继续寻找第(3. 如果某个数组完全被排除掉了,则直接在剩余的另一个数组中定位目标元素即可。题目给出的条件都用上了,时空复杂度也得到了提升,但仍然不符合题目要求的。1. 如果k=1, 则首先比较两个数组首位元素,取最小的一个。(对于长度为偶数的情况,需要寻找两次,并取平均值)智谱清言给出了一种新的解法,划分数组二分法。合并成一个新数组,然后sort,取中位数。接下来,人生苦短,我用Python~个元素,较小的一个数组中的第1~

zaishaoyi的专栏 1171

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

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

题目来源 4. 寻找两个正序数组的中位数 - 力扣(LeetCode) 题目描述 给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (m+n)) 。 示例 1 输入:nums1 = [1,3], nums2 = [2] 输出:2.00000 解释:合并数组 = [1,2,3] ,中位数 2 示例 2 输入:nums1 = [1,2], nums2 = [3,4]

优快云 1074

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

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

leetcode第4题

m0_74767826的博客 1438

力扣(leetcode)第4题寻找两个正序数组的中位数(Python)

最后,我写了一篇MySQL教程,里面详细的介绍了MySQL的基本概念以及操作指令等内容,欢迎阅读!解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5。输入:nums1 = [1,2], nums2 = [3,4]输入:nums1 = [1,3], nums2 = [2]解释:合并数组 = [1,2,3] ,中位数 2。请你找出并返回这两个正序数组的 中位数。的正序(从小到大)数组。算法的时间复杂度应该为。输出:2.00000。输出:2.50000。

qq_58737789的博客 1244

算法-寻找两个正序数组的中位数

题目:4.寻找两个正序数组的中位数(LeetCode)问题描述:给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2,请找出并返回这两个正序数组的中位数。其中要注意算法的时间复杂度应该为O(log(m+n))。

旗木白哉のblog 1091

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

这篇文章介绍了寻找两个正序数组中位数的算法。主要采用二分查找分割法,确保时间复杂度为O(log(min(m,n)))。关键点包括:交换数组确保nums1较短,通过二分查找确定分割点i和j,检查分割有效性(左半部分≤右半部分),并处理边界条件。算法根据数组总长度的奇偶性返回中位数:奇数取左半部分最大值,偶数取左右边界平均值。该解法满足题目要求,相比合并排序和双指针法更高效。文章包含详细算法分析、流程图解和代码实现要点,适用于数据库查询、统计分析等需要中位数计算的场景。

qq_32019341的博客 1061

LeetCode【0004】寻找两个正序数组的中位数

题目难度:困难;数据结构:数组;应用算法:二分查找。

AnFany 1471
上一篇: leetcode-题号206.反转链表
下一篇: vue-cli实现导出excel【转载】
朕爱偷菜
博客等级 码龄9年 481粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值