寻找两个正序数组的中位数-----逐步优化

题目与样例:
在这里插入图片描述
思路:这题的思路很简单,就是将两个有序的数组合并成新的数组,从而找到中位数
实现代码如下:

class Solution {
    public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        int count=0;//循环次数
		int i=0;
		int j=0;
		int len1=nums1.length;
		int len2=nums2.length;//数组的长度
		int[] nums3 = new int[len1+len2];
		int rest=(len1+len2)%2;
		double median;
		int index;
		while(count<(len1+len2))
		{
			if(i<len1&&j<len2){
				if(nums1[i]<=nums2[j]) {
					nums3[count] = nums1[i];
					count++;
					i++;
				}else {
					nums3[count] = nums2[j];
					count++;
					j++;
				}
			}else if(i<len1&&j>=len2) {
				nums3[count] = nums1[i];
				count++;
				i++;
			}else if(j<len2&&i>=len1) {
				nums3[count] = nums2[j];
				count++;
				j++;
			}
		}
		index=(len1+len2)/2;
		if(rest==0) {
			median=((double)nums3[index-1]+(double)nums3[index])/2.0;
		}else {
			median=(double)nums3[index]/1.0;
		}
		return median;
    }
}

内存消耗还是挺大的,时间也挺长的:
在这里插入图片描述
我们就这个例子来进行时间和空间上的优化。首先我们来优化一下时间,我们可以看到不管中位数在那个地方我们都要去遍历完两个数组,但实践上我们只需要遍历到两个数组长度除以2的位置就能够找到中位数了,于是我们可以在while循环的一开始加上如下判断代码:

if(count>(len1+len2)/2)
			{
				break;
			}

在提交一下可以看到消耗的时间:
在这里插入图片描述
至于空间上暂时还有找到优化的方法,欢迎大家留言交流

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值