Description
Difficulty: Hard
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)).
Example1
nums1 = [1, 3]
nums2 = [2]
The median is 2.0
Example2
nums1 = [1, 2]
nums2 = [3, 4]
The median is (2 + 3)/2 = 2.5
给出两个有序数列,返回两个数列形成的大数列的中位数。
Solution
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
|
class (object): def findMedianSortedArrays(self, nums1, nums2): """ :type nums1: List[int] :type nums2: List[int] :rtype: float """ p1 = 0 p2 = 0 isOdd = True last = 0 if (len(nums1) + len (nums2)) % 2 == 1: exp_num = (len(nums1) + len (nums2) + 1) / 2 isOdd = True else: exp_num = ((len(nums1) + len (nums2)) / 2) + 1 isOdd = False if len(nums1) == 0 or len(nums2) == 0: comb = nums1 + nums2 if isOdd == True: return comb[exp_num - 1] else: return (comb[exp_num - 1] + comb[exp_num - 2]) / float(2) elif nums1[-1] <= nums2[0]: comb = nums1 + nums2 if isOdd == True: return comb[exp_num - 1] else: return (comb[exp_num - 1] + comb[exp_num - 2]) / float(2) elif nums2[-1] <= nums1[0]: comb = nums2 + nums1 if isOdd == True: print(comb[exp_num]) return comb[exp_num - 1] else: return (comb[exp_num - 1] + comb[exp_num - 2]) / float(2) while p1 + p2 <= exp_num - 2: if p1 >= len(nums1): last = nums2[p2] p2 += 1 elif p2 >= len(nums2): last = nums1[p1] p1 += 1 elif nums1[p1] < nums2[p2]: last = nums1[p1] p1 += 1 else: last = nums2[p2] p2 += 1 if p1 >= len(nums1): toAdd = nums2[p2] elif p2 >= len(nums2): toAdd = nums1[p1] else: toAdd = min(nums1[p1], nums2[p2]) if isOdd == True: return toAdd else: return (toAdd + last) / float(2)
|
近期评论