栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

LeetCode4:寻找两个正序数组的中位数

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LeetCode4:寻找两个正序数组的中位数

题目:

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

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

思路:

①中位数分奇数和偶数两种情况考虑

②不需要真的合并两个数组,只需要找到中位数就行

③此解法的时间复杂度应该是O(min(m,n)),应该是没达到O(log(m+n))吧,但是有几次测试又很快,不懂

 

 

class Solution {
public:
	double findMedianSortedArrays(vector& nums1, vector& nums2) {
		int left = 0, right = nums1.size() + nums2.size() - 1;
		int mid = (left + right) / 2;
		int n1 = 0, n2 = 0;
		int flag = -1;
		if (nums1.size() == 0)
		{
			if (nums2.size() % 2 == 0)
				return (double)(nums2[(nums2.size() - 1) / 2] + nums2[(nums2.size() - 1) / 2 + 1]) / 2.0;
			else
				return (double)nums2[(nums2.size() - 1) / 2];
		}
		if (nums2.size() == 0)
		{
			if (nums1.size() % 2 == 0)
				return (double)(nums1[(nums1.size() - 1) / 2] + nums1[(nums1.size() - 1) / 2 + 1]) / 2.0;
			else
				return (double)nums1[(nums1.size() - 1) / 2];
		}
		while ((n1 + n2) <= mid && n1 < nums1.size() && n2 < nums2.size())
		{
			if (nums1[n1] <= nums2[n2])
			{
				n1++;
				flag = 1;
			}
			else
			{
				n2++;
				flag = 2;
			}
		}
		while ((n1 + n2) <= mid && n1 < nums1.size())
		{
			n1++;
			flag = 1;
		}
		while ((n1 + n2) <= mid && n2 < nums2.size())
		{
			n2++;
			flag = 2;
		}
		double x = flag == 1 ? (double)nums1[n1 - 1] : (double)nums2[n2 - 1];
		if (right % 2 != 0)//偶,还要一个mid+1
		{
			double y;
			if (n1 == nums1.size())
			{
				n2++;
				flag = 2;
				y = (double)nums2[n2 - 1];
			}
			else if (n2 == nums2.size())
			{
				n1++;
				flag = 1;
				y = (double)nums1[n1 - 1];
			}
			else
			{
				if (nums1[n1] <= nums2[n2])
				{
					n1++;
					flag = 1;
				}
				else
				{
					n2++;
					flag = 2;
				}
				y = flag == 1 ? (double)nums1[n1 - 1] : (double)nums2[n2 - 1];
			}
			return (x + y) / 2.0;
		}
		else
			return x;
	}
};

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/928489.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号