Problem: 4. 寻找两个正序数组的中位数
思路
先合并,后排序,最后找中间轴。
解题方法
由解题思路可知
Code
这是python3的代码。
class Solution:
def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
nums = sorted(nums1 + nums2)
if len(nums) % 2:
return float((nums[len(nums)//2]))
else:
return float((nums[len(nums)//2-1]+nums[len(nums)//2])/2)
python2的代码。
class Solution(object):
def findMedianSortedArrays(self, nums1, nums2):
nums = sorted(nums1 + nums2)
if len(nums) % 2:
return float((nums[len(nums)//2]))
else:
return (nums[len(nums)//2-1]+nums[len(nums)//2])/2.0
结果
double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) {
int meger[2000], *p = meger, t, count;
double res = 0;
for (int i = 0, nums11 = 0, nums22 = 0; i < (nums1Size + nums2Size); p++, i++) {
if(i < nums1Size) *p = nums1[nums11++];
else *p = nums2[nums22++];
}
for (int i = 0; i < nums1Size + nums2Size-1; i++) {
for (int j = i + 1; j < nums1Size + nums2Size; j++) {
if (meger[i] > meger[j]) {
t = meger[i];
meger[i] = meger[j];
meger[j] = t;
}
}
}
if ((nums1Size + nums2Size) % 2 != 0) {
res = meger[(nums1Size + nums2Size) / 2];
} else if ((nums1Size + nums2Size) % 2 == 0) {
res = (meger[(nums1Size + nums2Size) / 2] +
meger[(nums1Size + nums2Size) / 2 - 1]) /
2.0;
}
return res;
}
结果
有时会发现C语言会比Python慢一些。
一些思考
- 由于我爱好偷懒的习惯,经常使用
static
结果导致第一次的结果正确,后面的结果都是错误的。 - 其实,中位数可以用总数/2来去找,这让我想起了之前写的一篇文章——openJudge | 中位数 C语言