《LeetCode⼒扣练习》第4题C语⾔版(做出来就⾏,别问我效率。。。。)库你急哇,哈集美马戏特~~
这个题⽬的解答让我知道了, 我不会分析时间复杂度
本次答案没有实现进阶要求(时间复杂度为O(log(m+n)),采⽤的是双指针移动法求中位数
题⽬:
给定两个⼤⼩分别为 m 和 n 的正序(从⼩到⼤)数组 nums1 和 nums2。请你出并返回这两个正序数组的 中位数 。
⽰例 1:
输⼊:nums1 = [1,3], nums2 = [2]
输出:2.00000
解释:合并数组 = [1,2,3] ,中位数 2
⽰例 2:
输⼊:nums1 = [1,2], nums2 = [3,4]
输出:2.50000
解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5
⽰例 3:
输⼊:nums1 = [0,0], nums2 = [0,0]
输出:0.00000
⽰例 4:
输⼊:nums1 = [], nums2 = [1]
输出:1.00000
⽰例 5:
输⼊:nums1 = [2], nums2 = []
输出:2.00000
提⽰:
nums1.length == m
nums2.length == n
0 <= m <= 1000
0 <= n <= 1000
1 <= m + n <= 2000
-106 <= nums1[i], nums2[i] <= 106
上代码(经过OJ测试)
#include<stdio.h>
#include<stdlib.h>
double findMedianSortedArrays(int* nums1,int nums1Size,int* nums2,int nums2Size){
int centerloc=0;
int loc1=0,loc2=0;
int i=0;
double prenum=0,curnum=0;
centerloc=(nums1Size+nums2Size)/2;
for(i=0;i<=centerloc;i++)
{
if(loc1<nums1Size && loc2<nums2Size)
{
if(*(nums1+loc1)<*(nums2+loc2))
{
prenum=curnum;
curnum=*(nums1+loc1);
loc1++;
continue;
}
else
{
prenum=curnum;
curnum=*(nums2+loc2);
loc2++;
continue;
}
}
if(loc1<nums1Size)
{
prenum=curnum;
curnum=*(nums1+loc1);
enum c++loc1++;
continue;
}
if(loc2<nums2Size)
{
prenum=curnum;
curnum=*(nums2+loc2);
loc2++;
continue;
}
}
if((nums1Size+nums2Size)%2==0)
{
return(prenum+curnum)/2;
}
else
{
return curnum;
}
}
int main()
{
//int* nums1, int nums1Size, int* nums2, int nums2Size
int nums1[]={};
int nums2[]={1};
int nums1Size=0;
int nums2Size=1;
double result =findMedianSortedArrays(nums1,nums1Size,nums2,nums2Size); printf("%f",result);
return0;
}