Median of Two Sorted Arrays(获取两个有序数列的中值)

图解LeetCode4:Median of Two Sorted Arrays 文章目录理解题意思路1:最直观解法思路2:二分查找代码实现结论 Leetcode算法系列将详细讲解一些经典的面试算法题。 今天的算法是LeetCode中第四个题目,Median of Two Sorted Arrays,也就是给定两个有序数组求出中位数。   理解题意 首先给定的是两个有序数组,比如{1,3}以及{2},那么合并这两个数组就是{1,2,3},因此很显然中位数是2; 再给定... 阅读详情

转载注明出处:http://blog.youkuaiyun.com/xiaohanluo/article/details/77936830

Median of Two Sorted Arrays

最近没事刷LeetCode,有一题很有意思,取中值问题。

中值是指将统计总体当中的各个变量值按大小顺序排列起来,形成一个数列,处于变量数列中间位置的变量值就称为中位数。当数列的项数N为奇数时,处于中间位置的变量值即为中位数;当数列的项数N为偶数时,中位数则为处于中间位置的2个变量值的平均数。

There are two sorted arrays nums1 and nums2 of size m and n respectively.

Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).

Example 1:

nums1 = [1, 3]

nums2 = [2]

The median is 2.0

Example 2:

nums1 = [1, 2]

nums2 = [3, 4]

The median is (2 + 3)/2 = 2.5

题目意思是给定两个排好序的数组,然后找到这两个数组的中值,要求时间复杂度是O(log (m+n))。

正常思路是将两个数组合并成一个新的有序数组,然后直接找到中值就行了,时间复杂度是O(m+n),但是题目要求时间复杂度是O(log (m+n)),这就比较有意思了。

思路

正常解决是先排序再求中值,但是由于只需要拿到中值,所以理论上只需要排一半的序就可以获取中值,但是排序的话时间复杂度达不到O(log (m+n))的要求。

再深入理解一下,获取中值,可以理解成拿到数组中的第k个数。数组元素数为奇数,中值就是length/2 + 1的位置的数;当为元素数为偶数,中值就是length/2和length/2 + 1两个位置的平均值。

理清思路之后就可以开始着手解决了。

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

    if((totalLength & 0x1) == 1) { // 奇数
        return findMedian(nums1, nums1.length, nums2, nums2.length, totalLength/2 + 1);
    } else {
        return (findMedian(nums1, nums1.length, nums2, nums2.length, totalLength/2)
                + findMedian(nums1, nums1.length, nums2, nums2.length, totalLength/2 + 1)) /2d;
    }
}

解题思路取了巧,看到O(log (m+n))复杂度的时候,立马想到了二分法。

private static double findMedian(int[] longerArray, int m, int[] shorterArray, int n, int k) {
    if(n > m) { // 保证第一个数组是比较长的数组
        return findMedian(shorterArray, n, longerArray, m, k);
    }

    if(n == 0) { // 当短数组为空时候,直接从长数组中获取数值
        return longerArray[k - 1];
    }

    if(k == 1) { // 当数值位置在第一位时,比较两个数组获取最靠前的数值
        return Math.min(longerArray[0], shorterArray[0]);
    }

    // 根据比例二分那个数组
    int mk = (int)(m*k/(m + n)*1f);
    int nk = k - mk;

    if(longerArray[mk - 1] > shorterArray[nk - 1]) {
        int[] newLonger = Arrays.copyOfRange(longerArray, 0, mk);
        int[] newShort = Arrays.copyOfRange(shorterArray, nk, n);
        //去除了比较小的一部分,相当于整个数值向左移动了nk位
        return findMedian(newLonger, newLonger.length, newShort, newShort.length, k - nk);
    } else if(longerArray[mk - 1] < shorterArray[nk - 1]) {
        int[] newLonger = Arrays.copyOfRange(longerArray, mk, m);
        int[] newShort = Arrays.copyOfRange(shorterArray, 0, nk);
        //去除了比较小的一部分,相当于整个数值向左移动了nk位
        return findMedian(newLonger, newLonger.length, newShort, newShort.length, k - mk);
    } else {
        return longerArray[mk - 1];
    }
}

最后附上官方解决方法,没有使用递归。https://leetcode.com/articles/median-of-two-sorted-arrays/

附上其他解决此题的方法,部分算法不符合O(log (m+n))要求。http://blog.youkuaiyun.com/whucyl/article/details/23524045

个人信息保护合规审计人员(中级)能力测试试卷 本文是关于个人信息保护合规考试的试题解析,内容涵盖《个人信息保护法》相关规定。试卷包含单选题、多选题、判断题、简答题和案例分析题五种题型,总分100分,考试时间120分钟。试题重点考察个人信息处理的基本原则、敏感个人信息处理要求、合规审计流程、个人信息保护影响评估等内容。通过案例分析题详细解析了人脸识别登录、数据共享、跨境传输等场景下的合规要求。参考答案均严格依据《个人信息保护法》等法律法规,为个人信息处理活动提供了明确的合规指引。 阅读详情

相关推荐

树莓派用网线连着电脑,但是找不到它的ip 以及设置静态IP

第一次的话,树莓派默认是没有ssh的。需要把内存卡取出来,新建一个ssh文件,这个简单,新建一个txt文件重命名就好了。 如果前面配置了连接wifi的conf文件,它是会自动去连接wifi的,wifi连不上,它才会去尝试有线连接。所以把它的wifi关了,才会自动用网线连接。 另外,建议设置静态ip连接,这样避免网络连接突然中断。具体在etc/dhcpcd.conf文件中,把这几行前面的#去掉,然后后面的信息改成自己的就好了。 具体改法: 第一行是ip地址,这个找到自己电脑的ip段,然后改后面两个数字就好了

wander_ing的博客 1万+

4. Median of Two Sorted Arrays(两个有序数组的中位数)

有两个有序数组nums1和nums2分别为m和n。 找到两个有序数组的中位数。 总运行时间复杂度应为O(log(m + n))。 您可以假设nums1和nums2不能都为空。 例 1: nums1 = [1, 3] nums2 = [2] The median is 2.0 例2: nums1 = [1, 2] nums2 = [3, 4] The median is (2 + 3)/2 =...

czp_374的博客 530

腾讯云智后台开发实习面试全纪录(已offer)

腾讯云智后台开发实习面经

wenwenaier的博客 5904

Median of Two Sorted Arrays

Median of Two Sorted Arrays问题描述解题思路思路一 :merge+sortpython3代码思路二:第k最小值C++JAVA思路三:二分查找C++ 问题描述 There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two sorted ...

weixin_39230647的博客 328

红外协议 IR NEC 协议深度解析-简单易懂协议详解

1. 协议特征 使用双向编码(又称曼彻斯特编码); 使用38K载波对编码后的波形进行调制; 位时间 1.12ms 或 2.25ms 2. 调制 定义脉冲560µS为脉冲基本宽度T; 根据脉冲时间长短来解码。推荐载波占空比为1/3至1/4: (1) Logic “1” 位宽为2.25ms,脉冲时间560us(T + 3T); (2) Logic “0” 位宽为1.12ms,脉冲时间560us(T + T)。 (3 ) 重复码: 位宽为11.25ms,脉冲时间9ms(16T + 4T)。 3. 协议

代码打工人的博客 1万+

保姆级教程:用Seurat 5.0.1搞定单细胞测序数据从质控到细胞注释的全流程

本文提供了一份详细的Seurat 5.0.1单细胞测序数据分析教程,涵盖从数据质控到细胞注释的全流程。通过R代码示例和可视化分析,帮助用户掌握单细胞RNA测序数据处理的核心技术,包括数据标准化、降维聚类和细胞类型注释,适用于生物信息学研究和临床数据分析。

weixin_29067143的博客 197

LeetCode(4)--Median of Two Sorted Arrays

题目如下: There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).解题思路: 思路1:最直接的一种思路就是将两

zhangph1229的博客 376

Windows环境Oracle19C安装与配置全攻略

本文详细介绍了在Windows环境下安装与配置Oracle19C数据库的完整流程,包括环境准备、安装步骤、网络配置、客户端工具设置及常见问题解决方案。特别针对Windows 10和Windows Server 2016及以上版本提供了优化建议,帮助用户高效完成Oracle19C的部署与维护。

weixin_28455801的博客 487

[leetcode]Median of Two Sorted Arrays

Median of Two Sorted Arrays: 题意:给定两个被排序过的数组(从小到大),找出两个数组合并之后数组的中位数,时间复杂度在O(log(m+n))。通过函数返回值可以看出,当两数组长度和偶数时,返回中间两个数的平均数。 解法:首先观察要求的时间复杂度,一定不能采用将两个sorted array merge的方法。             O(log Min(m,n))方法

eiwoqu的专栏 406

FPGA中的CMAC硬核与Interlaken硬核

CMAC硬核和Interlaken硬核是FPGA中两种重要的内置功能模块,它们分别在CNN推理和高带宽芯片到芯片接口方面发挥着关键作用。FPGA(Field Programmable Gate Array,现场可编程逻辑门阵列)中的CMAC硬核与Interlaken硬核是两种重要的内置功能模块,它们在FPGA设计中扮演着关键角色。需要注意的是,FPGA设计中的硬核选择不仅取决于硬核本身的性能,还需要考虑硬核与FPGA芯片其他部分的兼容性、功耗、成本等因素。Interlaken硬核。

weixin_41230430的博客 1481

使用Captum库对CIFAR数据集进行模型可解释性分析

为了训练模型,我们需要指定损失函数和优化技术。损失函数用于衡量模型的性能,在训练过程中,我们通过调整模型参数来最小化损失。本教程使用。

2501_90323865的博客 178

leetcode之 median of two sorted arrays

这是我做的第二个leetcode题目,一开始以为和第一个一样很简单,但是做的过程中才发现这个题目非常难,给人一种“刚上战场就踩上地雷挂掉了”的感觉。后来搜了一下leetcode的难度分布表(leetcode难度及面试频率)才发现,该问题是难度为5的问题,真是小看了它!网上搜了很多答案,但是鲜见简明正确的解答,唯有一种寻找第k小值的方法非常好,在此整理一下。        首先对leetcode的

姚光超的专栏 9万+

把财务与管理会计装进一张表:读懂 S/4HANA 的 ACDOCA

别慌,这反而是设计所需。只是大量历史上为汇总、加速而建的索引与汇总表被淘汰或改造,很多被兼容视图 compatibility views 替代,通过视图去 ACDOCA 或 ACDOCT 取数,从而保证老代码还能 SELECT 到数据,但失去写权限。它把原来分散在多张表里的信息整合到一起,例如总账、固定资产、物料账、盈利能力分析 CO-PA、成本控制等维度,发布过的资料多次强调这一点。其二,查询必须带上高选择性的条件,尤其是 RLDNR、RBUKRS、GJAHR 这三个维度,能大幅降低列存扫描的代价。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 948

【LeetCode】median of two sorted arrays(两个有序数组的中值)

题目 There are two sorted arrays A and B of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)). 有两个排序的数组A和B分别是m和n。找到两个排序数...

码农印象 2292

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

[LeetCode]Median of Two Sorted Array

[LeetCode]Median of Two Sorted Array

xmb24的博客 338

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Leetcode 4 median-of-two-sorted-arrays题解

Leetcode median-of-two-sorted-arrays题解 虽然很简单,但是值得纪念一下,第一次超过100%的人 题目链接 思路: **Talking is no use, show your my codes** 代码: class Solution { public double findMedianSortedArrays(int[] nums1, int[] n...

qq_42308861的博客 319

Leetcode 4 Median of Two Sorted Arrays

今天发现了leetcode上面一道题,觉得非常经典,记录之。 题目是这样的:给定两个已经排序好的数组(可能为空),找到两者所有元素中第k大的元素。另外一种更加具体的形式是,找到所有元素的中位数。本篇文章我们只讨论更加一般性的问题:如何找到两个数组中第k大的元素?不过,测试是用的两个数组的中位数的题目,Leetcode第4题 Median of Two Sorted Arrays 方案1:假

思维决定一切 3万+

LC:4. Median of Two Sorted Arrays

4.Median of Two Sorted Arrays from typing import List class Solution: def findMedianSortedArrays(self, A: List[int], B: List[int]) -> float: m, n = len(A), len(B) if m &...

weixin_34221276的博客 184

LeetCode 4. Median of Two Sorted Arrays题解

题目 4. Median of Two Sorted Arrays There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m...

孑辞的博客 411

leetcode之Median of Two Sorted Arrays问题

问题描述: There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)). 题目示例: Example 1:

漫漫学习路 2949

Substring with Concatenation of All Words & Median of Two Sorted Arrays & Divide Two Integers

(1) Substring with Concatenation of All Words

文森的学术之路 509

Median of Two Sorted Arrays - LeetCode

目录 题目链接 注意点 解法 小结 题目链接 Median of Two Sorted Arrays - LeetCode 注意点 要考虑数组长度不一致的情况 解法 解法一:将两个数组合并成一个有序数组,根据数组长度分奇偶情况求中位数。时间复杂度为O(m+n) c...

weixin_30924239的博客 137

LeetCode每天刷day4:Median of Two Sorted Arrays

题目链接:Median of Two Sorted Arrays C++: class Solution { public: double findMedianSortedArrays(vector&lt;int&gt;&amp; nums1, vector&lt;int&gt;&amp; nums2) { int len1 = nums1.size(); ...

Jos's blogs 168

LeetCode Median of Two Sorted Arrays

There are two sorted arrays A and B of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).思路分析:这题容易想到O(m+n)的解法,就是先Merge两个数组,然后返

Coding for Dreams 1731
上一篇: Android性能优化总结
下一篇: LeakCanary原理解析
王三的猫阿德
王三的猫阿德 领域专家: 操作系统技术领域 领域专家: 操作系统技术领域
博客等级 码龄15年 179粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值