当前位置: 代码迷 >> 综合 >> leetcode4:寻找两个有序数组的中位数
  详细解决方案

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

热度:36   发布时间:2023-09-19 06:31:23.0

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

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

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

思路:直接顺序遍历,保存当前遍历值与上一个遍历值,同时检查是否为中位数下标。

C代码:

double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size){double d1,d2;      //d1d2设为double类型 除2时int i=0,j=0,count=0;int limit=(nums1Size+nums2Size)/2+1,even;  //limit向上取整double mid;if((nums1Size+nums2Size)%2) even=1;    //判断中位数取值计算类型else even=0;while(i<nums1Size && j<nums2Size){d2=d1;                            //d2保存上一个遍历值if(nums1[i]<nums2[j])             //d1保存现在的遍历值{d1=nums1[i];i++;}else{d1=nums2[j];j++;}count++;   //指示d1个数if(count==limit){if(even) mid=d1;else mid=(d1+d2)/2;}}while(i<nums1Size)              //若nums1没有遍历完{d2=d1;d1=nums1[i];i++;count++;if(count==limit){if(even) mid=d1;else mid=(d1+d2)/2;}}while(j<nums2Size)              //若nums2没有遍历完{d2=d1;d1=nums2[j];j++;count++;if(count==limit){if(even) mid=d1;else mid=(d1+d2)/2;}}return mid;
}

提交结果:

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