題目
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)).
思路
要求出兩個有序數組(長度分別爲m和n)的中位數,並且要求時間複雜度爲O(log (m+n))。可以利用歸併排序的思想,將兩個數組歸併排序爲一個有序數組,然後取中位數即可。但這樣做出來的時間複雜度好像是O(m+n),不知爲什麼仍然通過了= =,就先把代碼貼出來吧,以後想到更符合的算法再改進。
代碼
Python
class Solution(object):
def findMedianSortedArrays(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: float
"""
nums = []
i,j = 0,0
for k in range(len(nums1) + len(nums2)):
if (i < len(nums1)) & (j < len(nums2)):
if nums1[i] < nums2[j]:
nums.append(nums1[i])
i += 1
else:
nums.append(nums2[j])
j += 1
elif i < len(nums1):
nums.append(nums1[i])
i += 1
elif j < len(nums2):
nums.append(nums2[j])
j += 1
if(len(nums)%2):
return float(nums[len(nums)/2])
else:
return (nums[len(nums)/2 - 1] + nums[len(nums)/2])/float(2)
Java
public class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int[] nums = new int[nums1.length + nums2.length];
int i = 0;
int j = 0;
for(int k = 0;k < nums1.length + nums2.length;++k)
{
if(i < nums1.length && j < nums2.length)
{
if(nums1[i] < nums2[j])
{
nums[k] = nums1[i];
++i;
}
else
{
nums[k] = nums2[j];
++j;
}
}
else if(j < nums2.length)
{
nums[k] = nums2[j];
++j;
}
else if(i < nums1.length)
{
nums[k] = nums1[i];
++i;
}
}
if(nums.length%2 == 1)
return (double)nums[(nums.length-1)/2];
else
return (nums[nums.length/2-1] + nums[nums.length/2])/((double)2);
}
}