
题目:
给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 。 请找出这两个有序数组的中位数。要求算法的时间复杂度为 O(log (m+n)) 。
|
我的思路:
把两个数组按大小连接成一个数组,然后取中位数,主要是复杂度有要求
后来发现有的人的解法:
直接nums1.extend(nums2),然后调用sort,取中位数,发现好像也不超时,吐血!我的特殊情况还调了一会…
def (nums1, nums2): """ :type nums1: List[int] :type nums2: List[int] :rtype: float """ len1 = len(nums1) len2 = len(nums2) if len1 == len2 == 0: return 0 if len1 == len2 == 1: return (nums1[0] + nums2[0]) / 2 maxl = [] minl = [] cnt = 0 if len1 > len2: maxl = nums1 minl = nums2 else: maxl = nums2 minl = nums1 for i, v in enumerate(maxl): if minl and maxl[i] > minl[cnt]: maxl.insert(i, minl[cnt]) cnt += 1 if cnt == len(minl): break if cnt < len(minl): for i in range(cnt, len(minl)): maxl.append(minl[i])
maxlen = int(len(maxl) / 2) if len(maxl) % 2 == 1: return maxl[maxlen] else: return (maxl[maxlen - 1] + maxl[maxlen]) / 2
|
近期评论