LeetCode上求两个排序数组中位数问题—— Median of Two Sorted Arrays
1.题目
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
2.中文翻译
有两个大小分别为m和n的排序数组nums1和nums2。
查找两个排序数组的中位数。 总的运行时间复杂度应该是O(log(m + n))。
例1:
nums1 = [1,3]
nums2 = [2]
中位数是2.0
例2:
nums1 = [1,2]
nums2 = [3,4]
中位数是(2 + 3)/ 2 = 2.5
3.解题思路
合并:在这里,因为规定了时间复杂度,因此我们要充分利用这一点,又因为是排序数组,在C语言数据结构中我们学过两个排序链表的合并,其复杂度为O(log2(m+n));因此,这里采取空间换时间的策略,构建一个新的数组nums[],将nums1和nums2比较,从第一个开始,若nums1元素小于nums2元素,放入新数组nums中,然后nums1往后移动一个位置,大于则放入nums2元素,同样往后移动,当nums1和nums2有一个数组移动完成,则将另一个数组中剩下元素移入nums数组中。
求中位数:中位数在奇数和偶数时取值不同,奇数数组为最中间一个,偶数为中间两个和的一半,根据合并后nums长度来求种中位数
4.算法如下
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
double low,high,mid=0;
int nums[]=new int[nums1.length+nums2.length];
int i=0,j=0,k=0;
while (i<nums1.length&&j<nums2.length) { //两数组都有元素时
if (nums1[i]<nums2[j]) {
nums[k++]=nums1[i++]; //比较完一次往后移动一位
}
else {
nums[k++]=nums2[j++];
}
}
while (i<nums1.length) //nums2数组比较完
nums[k++]=nums1[i++];
while(j<nums2.length) //nums1数组比较完
nums[k++]=nums2[j++];
if ((nums.length%2)==0) { //数组长度为偶数情况下
low=(double)nums[nums.length/2];
high=(double)nums[(nums.length/2)-1];
mid=(low+high)/2;
}
else {
mid=(double)nums[nums.length/2]; //数组长度为奇数情况下
}
return mid;
}
5.LeetCode上提交结果
LeetCode上求两个排序数组中位数问题—— Median of Two Sorted Arrays相关推荐
- 两个排序数组的中位数(4.Median of Two Sorted Arrays)
题目: 有两个排序的数组nums1和nums2分别为m和n大小. 找到两个排序数组的中位数.整体运行时间复杂度应为O(log(m + n)). 示例1: nums1 = [1,3] nums2 = [ ...
- C#LeetCode刷题之#4-两个排序数组的中位数(Median of Two Sorted Arrays)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4005 访问. 给定两个大小为 m 和 n 的有序数组 nums1 ...
- leetcode题库:4.两个排序数组的中位数
题目: /** *leetcode题库:4. 求两个排序数组的中位数 * * 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 . * 请找出这两个有序数组的中位数. ...
- Leetcode4---求两个排序数组的中位数
题目:给定两个排序数组,求两个排序数组的中位数,要求时间复杂度为O(log(m+n)) 举例: Example 1: nums1 = [1, 3] nums2 = [2]The median is 2 ...
- 【LeetCode】004 Median of Two Sorted Arrays 两个排序数组合并后的中位数
题目:LeetCode 004 Median of Two Sorted Arrays There are two sorted arrays nums1 and nums2 of size m an ...
- LeetCode 4 两个排序数组的中位数
有两个大小为 m 和 n 的排序数组 nums1 和 nums2 . 请找出两个排序数组的中位数并且总的运行时间复杂度为 O(log (m+n)) . 示例 1: nums1 = [1, 3] num ...
- 求两个有序数组的中位数或者第k小元素
问题:两个已经排好序的数组,找出两个数组合并后的中位数(如果两个数组的元素数目是偶数,返回上中位数). 设两个数组分别是vec1和vec2,元素数目分别是n1.n2. 算法1:最简单的办法就是把两个数 ...
- [leetcode] 4 寻找两个有序数组的中位数(二分+递归查找第K小数)(重要)
问题描述 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 n ...
- 求两个有序数组的中位数
leetcode: 4 Median of Two Sorted Arrays 题目:给两个有序数组,长度为n和m,在 O(log (m+n))时间内找出两个数组中所有数字的中位数. 题解(参考讨论区 ...
最新文章
- java 抽象类 命名,java – 抽象类命名约定
- kali无限登录_Kali Linux没有无线网卡?玩个锤纸~
- 向上造型和向下造型_国标舞So easy?!亲,你怕是凹错造型咯~
- Bean放入Spring容器,你知道几种方式?
- Lazarus 日志工具 MultiLog
- GB28181-2016系统相关技术介绍
- qemu 的方式安装debian 模拟powerpc
- android lottie字体json,Android Lottie集成及基本用法
- 初识SQL(新手入门)
- 台达plc控制伺服电机编程实例_分享3个台达PLC控制伺服项目接线及程序案例
- 加密狗映射至虚拟服务器,ESXI 5.1/5.5 主机添加或映射USB设备(加密狗)(示例代码)...
- 彻底清理c盘空间,本人亲测有效--WinDirStat
- 使用 Python 进行数据清洗的完整指南
- android led 字体下载,Android LED数字/电子表字体digital font
- 面试官问“你还有什么需要了解的吗”——应该这样回答
- win7共享网络的方法简述
- Vulkan教程 - 01 环境搭建
- pathon和c语言的区别
- 【华为机试】【校招】【Java】机器人走迷宫(DFS)
- oracle表增量同步到hive分区表
热门文章
- mysql 语句_如何记录MySQL执行过的SQL语句
- 博士申请 | 北京理工大学宋承天老师组招收目标感知与识别方向博士生
- NeurIPS 2021 | 微软研究院提出CLUES,用于NLU的少样本学习评估
- NeurIPS 2021有哪些值得读的NLP论文?
- 博士申请 | 美国杜克大学徐攀助理教授招收机器学习/人工智能全奖博士生
- 2021年自然语言处理 (NLP) 算法学习路线!
- 想快速发表CV/NLP论文?试试这几个方向!
- 学好机器学习,这里有想要的一切
- 解决Spring Boot 整合Security后,所有接口提示Unauthorized、返回401
- Shiro+springboot+mybatis(md5+salt+散列)认证与授权-02