您的位置:首页 > 其它

[leetcode] Median of Two Sorted Arrays 寻找两个有序数组的中位数

2015-08-13 21:02 615 查看
There are two sorted arrays nums1 and nums2 of
size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).

题目大意:略。中位数:即两个数组中下标为中间的一个。(一开始理解为找数的大小位于中间的一个,晕)

//判断数组是升序还是降序
int sort_direction(int* nums1, int nums1Size, int* nums2, int nums2Size)
{
if(nums1Size < 2)
{
if(nums2Size < 2)
{
return 0;
}
else
{
return (nums2[0] - nums2[nums2Size-1]);
}
}
else
{
if(nums2Size < 2)
{
return (nums1[0] - nums1[nums1Size-1]);
}
else
{
if(nums1[0] != nums1[nums1Size-1])
return (nums1[0] - nums1[nums1Size-1]);
else
return (nums2[0] - nums2[nums2Size-1]);
}
}
}

double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) {

int *merge = malloc(sizeof(int)*(nums1Size+nums2Size));
int *nums11 = malloc(sizeof(int)*(nums1Size+1));
int *nums22 = malloc(sizeof(int)*(nums2Size+1));

int *p = merge, *n1 = nums11, *n2 = nums22;
int i = 0;
int drt = sort_direction(nums1,nums1Size,nums2,nums2Size);
int tmp;
int len = 0;

memcpy(nums11, nums1, sizeof(int)*(nums1Size+1));
memcpy(nums22, nums2, sizeof(int)*(nums2Size+1));
nums11[nums1Size] = (unsigned int)(-1) >> 1;<span style="white-space:pre">	</span>//边界哨兵值
nums22[nums2Size] = (unsigned int)(-1) >> 1;
//printf("drt:%d\n", drt);
memset(merge, 0x0, sizeof(int)*(nums1Size+nums2Size));

for(i = 0; i < nums1Size+nums2Size; i++)
{
{
tmp = *nums11 < *nums22 ? *nums11++ : *nums22++;
*merge++ = tmp;
len++;
}
}
/* printf("len:%d\n", len);
for(i = 0; i < nums1Size+nums2Size; i++)
{
printf("%d ", p[i]);
}
printf("\n");*/

return (len%2 ? p[len/2] : (double)(p[len/2-1] + p[len/2])/2);
}
运行时间:24ms ,还可以优化,其他人的最快20ms
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c leetcode 算法