[一起刷leetcode吧] 4.Median of Two Sorted Arrays

Median of Two Arrays


题目描述

输入两个升序数组,输出所有数字的中位数(如果中位数有两个,则为其平均值)

分析

这题第一感觉应该是个O(log(m+n))的算法。但看了下数据范围,1 <= m + n <= 2000。这不偷懒做个O(m+n)都是对题目的不尊重吧。(两题都刷完再来写O(log(m+n)))。

思路应该比较简单,维护两个指针,从两个数组的头开始,哪个数字小就自增,直到达到中位数。处理的时候注意边界值。没什么要分析的。

代码

class Solution {
public:
	double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
		int cur1 = 0, cur2 = 0;
		int len = nums1.size() + nums2.size();
		double res = 0.0;
		while (cur1 + cur2 < (len + 1) / 2)
		{
			if (cur1 >= nums1.size())
				cur2++;
			else if (cur2 >= nums2.size())
				cur1++;
			else
			{
				if (nums1[cur1] <= nums2[cur2])
					cur1++;
				else
					cur2++;
			}
		}
		if (cur1 == 0)
			res = nums2[cur2 - 1];
		else if (cur2 == 0)
			res = nums1[cur1 - 1];
		else
		{
			if (nums1[cur1 - 1] > nums2[cur2 - 1])
				res = nums1[cur1 - 1];
			else
				res = nums2[cur2 - 1];
		}
		if (len % 2 == 0)
		{
			if (cur1 >= nums1.size())
				res += nums2[cur2];
			else if (cur2 >= nums2.size())
				res += nums1[cur1];
			else
			{
				if (nums1[cur1] < nums2[cur2])
					res += nums1[cur1];
				else
					res += nums2[cur2];
			}
			res = res / 2;
		}
		return res;
	}
};

思考

再想想不一定会想出更优的算法,但不想一定很轻松

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值