题目
给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。
算法的时间复杂度应该为 O(log (m+n)) 。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/median-of-two-sorted-arrays
我的思路
简单粗暴
1.把两个数组放在一个数组中,用strcat函数
2.再用冒牌排序,从小到的大进行排序
3.用二分法进行比较,分为偶数和奇数
double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size){
strcat(nums1,nums2);
int len =nums1Size+nums2Size;
int i=0, j=0, temp=0;
double sum=0;
for(i=0;i<len-1;i++)
{
for(j=0;j<len-1-i;j++)
{
if(nums1[j]>nums1[j+i])
{
temp=nums1[j];
nums1[j]=nums1[j+1];
nums1[j+1]=temp;
}
}
}
nums1Size=len%2;
if(nums1Size==0)
{
sum=(double)(nums1[nums1Size-1]+nums1[nums1Size]);
sum=sum/2;
return sum;
}
else
{
sum=(double)nums1[nums1Size];
return sum;
}
}
问题是最后还是报错了
思路是这样,给的错误是执行错误
应该是底层编译器的问题了
看一段能过的
double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size)
{
int p1 = 0, p2 = 0;
int m = 0,l = 0,k = 0;
int arr[nums1Size + nums2Size];
int q;
double n;
while (p1 < nums1Size || p2 < nums2Size)
{
if (p1 == nums1Size)
{
q = nums2[p2++];
}
else if (p2 == nums2Size)
{
q = nums1[p1++];
}
else if (nums1[p1] < nums2[p2])
{
q = nums1[p1++];
}
else
{
q = nums2[p2++];
}
arr[p1 + p2 - 1] = q;
}
m = nums1Size + nums2Size;
if(m == 1) return arr[m-1];
else
{
if(m%2 == 0)
{
n = (arr[m/2] + arr[m/2-1])/2.0;
}
else
{
n = arr[m/2];
}
}
return n;
}
作者:gracious-vvrightqhn
链接:https://leetcode.cn/problems/median-of-two-sorted-arrays/solution/4-xun-zhao-liang-ge-zheng-xu-shu-zu-de-z-ekin/