C#LeetCode刷题之#4-两个排序数组的中位数(Median of Two Sorted Arrays)
问题
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/4005 访问。
给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 。
请找出这两个有序数组的中位数。要求算法的时间复杂度为 。
你可以假设 nums1 和 nums2 不同时为空。
nums1 = [1, 3]
nums2 = [2]
中位数是 2.0
nums1 = [1, 2]
nums2 = [3, 4]
中位数是 (2 + 3)/2 = 2.5
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)).
You may assume nums1 and nums2 cannot be both empty.
nums1 = [1, 3]
nums2 = [2]
The median is 2.0
nums1 = [1, 2]
nums2 = [3, 4]
The median is (2 + 3)/2 = 2.5
中位数(又称中值,英语:Median),统计学中的专有名词,代表一个样本、种群或概率分布中的一个数值,其可将数值集合划分为相等的上下两部分。
对于有限的数集,可以通过把所有观察值高低排序后找出正中间的一个作为中位数。如果观察值有偶数个,通常取最中间的两个数值的平均数作为中位数。
这道题经过简单的思维转换其实可以转换成求第k小的值问题,首先合并2个数组,再找出第k小的值。该题需要根据原问题规模(m+n)的奇偶性做出相应调整。
示例
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/4005 访问。
public class Program {public static void Main(string[] args) {int[] nums1 = { 1, 2, 3 };int[] nums2 = { 4, 5 };var res = FindMedianSortedArrays(nums1, nums2);Console.WriteLine($"The median is {res}.");Console.ReadKey();}private static double FindMedianSortedArrays(int[] nums1, int[] nums2) {int size = nums1.Length + nums2.Length;int[] union = new int[size];int mid = size / 2;int even = (size % 2 == 0) ? 1 : 0;int m1, m2;int left, right;for(int i = m1 = m2 = 0; i < size; i++) {left = m1 < nums1.Length ? nums1[m1] : int.MaxValue;right = m2 < nums2.Length ? nums2[m2] : int.MaxValue;if(left < right) {union[m1 + m2] = nums1[m1];m1++;} else {union[m1 + m2] = nums2[m2];m2++;}if(i == mid) break;}return (union[mid] + union[mid - even]) / 2.0;}}
以上给出1种算法实现,以下是这个案例的输出结果:
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/4005 访问。
The median is 3.
分析:
显然这种解法在最坏的情况下的时间复杂度为 ,并没有达到题中要求的 ,这里仅为标记,稍后再来改进算法。
C#LeetCode刷题之#4-两个排序数组的中位数(Median of Two Sorted Arrays)相关推荐
- LeetCode刷题第二天——3Longest Substring Without repeating character 4 Median of Two Sorted Arrays...
混淆点: 子串 连续 子序列 可以不连续 知识点: HashMap: 出现问题: 1.使用unordered_map头文件时报错 #error This file requires compiler ...
- 算法—两个有序数组的中位数 Median of Two Sorted Arrays
关注微信公众号:CodingTechWork,一起学习进步. 题目 There are two sorted arrays nums1 and nums2 of size m and n respec ...
- 学渣的刷题之旅 leetcode刷题 88. 合并两个有序数组
给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n ...
- LeetCode刷题(Python)——在排序数组中查找元素的第一个和最后一个位置
题目描述 给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置. 你的算法时间复杂度必须是 O(log n) 级别. 如果数组中不存在目标值 ...
- leetcode题库:4.两个排序数组的中位数
题目: /** *leetcode题库:4. 求两个排序数组的中位数 * * 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 . * 请找出这两个有序数组的中位数. ...
- 力扣刷题之合并两个有序数组
力扣刷题之合并两个有序数组 题目 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目. 请你 合并 nu ...
- LeetCode 4 两个排序数组的中位数
有两个大小为 m 和 n 的排序数组 nums1 和 nums2 . 请找出两个排序数组的中位数并且总的运行时间复杂度为 O(log (m+n)) . 示例 1: nums1 = [1, 3] num ...
- 两个排序数组的中位数(4.Median of Two Sorted Arrays)
题目: 有两个排序的数组nums1和nums2分别为m和n大小. 找到两个排序数组的中位数.整体运行时间复杂度应为O(log(m + n)). 示例1: nums1 = [1,3] nums2 = [ ...
- 算法-两个排序数组的中位数
题目 两个排序数组的中位数 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 . 请找出这两个有序数组的中位数.要求算法的时间复杂度为 O(log (m+n)) . 示例 1:num ...
- Leetcode4---求两个排序数组的中位数
题目:给定两个排序数组,求两个排序数组的中位数,要求时间复杂度为O(log(m+n)) 举例: Example 1: nums1 = [1, 3] nums2 = [2]The median is 2 ...
最新文章
- php判断值是否为空
- 【转载】C#编码标准━━项目设置和项目结构
- 开发日记-20190506 关键词 汇编语言(五)Hello World!
- 利用zabbix-java-gateway监控jvm
- 宜搭数字工厂,让订单周期缩减三分之一
- 转:在 C# 中使用 P/Invoke 调用 Mupdf 函数库显示 PDF 文档
- linux硬件 软件raid,Linux下软件RAID的实现
- 2017年,Java程序猿10本经典好书推荐
- 蓝桥杯单片机stc15f2k61s2矩阵按键中断扫描代码
- 海量大数据大屏分析展示一步到位:DataWorks数据服务对接DataV最佳实践 1
- Java中的继承:父类和子类的关系
- 真实VS虚拟,虚拟现实如何定义
- linux安装kafka_巨杉Tech | 基于Kafka+Spark+SequoiaDB实时处理架构快速实战
- 制作整人计算机病毒,自己制作简单病毒---三行命令的整人BAT,弹出很多窗口,一直弹到内存耗...
- 建筑工程PPP项目财务风险控制探析
- 河北省谷歌高清卫星地图下载
- 万豪国际成立全球清洁卫生委员会,推行更高标准清洁消毒措施
- 以太坊中的账户、交易、Gas和区块Gas Limit等基本概念
- 用Windows Performance Toolkit(WPT)分析Vista系统
- 企业邮箱如何申请?如何用手机号注册邮箱?