leetcode4. 寻找两个有序数组的中位数

博客主要讨论了LeetCode第4题的解决方案,该题为寻找两个有序数组的中位数。作者在本地实现解法时未遇到问题,但在提交时遇到heap-buffer-overflow错误。文章提供了两种解法,并分享了一段可行的外部代码。尽管尝试将数组转换为指针方式,但问题仍未解决。文章以这个问题为例,建议在遇到涉及两个限定值的问题时,采取特定的解决策略。
摘要由CSDN通过智能技术生成

4. 寻找两个有序数组的中位数

给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。

请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。

你可以假设 nums1 和 nums2 不会同时为空。

示例 1:

nums1 = [1, 3]
nums2 = [2]

则中位数是 2.0
示例 2:

nums1 = [1, 2]
nums2 = [3, 4]

则中位数是 (2 + 3)/2 = 2.5

这道题本机上各种解法都没有任何问题,但是提交一直报heap—buff-overflow,但是没有堆栈超出啊,唉
一下是两种解法

int num=nums1Size+nums2Size;
	int count=num/2+1;
	int result,i=0,j=0,value1=0,value2=0;
	while(count--){
		if(nums1[i]<=nums2[j]&&i<nums1Size){
			value2=value1;
			value1=nums1[i];
			i++;
		}else if(nums2[j]<nums1[i]&&j<nums2Size){
			value2=value1;
			value1=nums2[j];
			j++;
		}
		
	}
	if(num%2==1){
		return value1;;
	}else
	{
		return (value1+value2+0.0)/2;
	}
double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size){
			int num=nums1Size+nums2Size;
	int count=num/2;
	int result,i=0,j=0,value1=0,value2=0;
	while(count--){
		if(nums1[i]<=nums2[j]&&i<nums1Size){
			value1=nums1[i];
			i++;
		}else if(nums2[j]<nums1[i]&&j<nums2Size){
			value1=nums2[j];
			j++;
		}
		
	}
	if(i==nums1Size){
		value2=nums2[j];
	}else if(j==nums2Size){
		value2=nums1[i];
	}else{
		if(nums1[i]<nums2[j]){
			value2=nums1[i];
		}else{
			
			value2=nums2[j];
		}
	}
		
		
	if(num%2==1){
		return value2;;
	}else{
		return (value1+value2+0.0)/2;
	}

这里附上别人的可行代码

double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size){
    int cernterSite = 0;
    int i = 0;
    int j = 0;
    int k = 0;
    double preValue = 0;
    double curValue = 0;

    cernterSite = (nums1Size + nums2Size)/2;

    for(k = 0; k <= cernterSite; k++){
        if(i < nums1Size && j < nums2Size){
            if(*(nums1 + i) > *(nums2 + j)){
                preValue = curValue;
                curValue = *(nums2 + j);
                j++;
                continue; 
            }else{
                preValue = curValue;
                curValue = *(nums1 + i);
                i++;
                continue;
            }
        }

        if(j < nums2Size){
            preValue = curValue;
            curValue = *(nums2 + j);
            j++;
            continue;
        }

        if(i < nums1Size){
            preValue = curValue;
            curValue = *(nums1 + i);
            i++;
            continue;
        }
    }

    if((nums1Size + nums2Size)%2){
        return curValue;
    }else{
        return (preValue+curValue)/2;
    }
}

数组改成指针方式也不行

总结

以后碰见这种有两个限定值的问题,应该采用一下的方式

循环(
	
	if(i,j都满足){}
	if(i满足){}	
	if(j满足){}
)
这样就不会报任何内存的错误了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值