17
17
比较k/2位置处数字的大小,小的那一部分一定是在k小的数字之内(可以假设法证明),这样剩下的问题就是从剩下的列表中找
18
18
第k/2位数了.等到这个数为1,那么就好计算了.
19
19
20
+
21
+ 注意:本解答仍然有问题。
22
+
20
23
"""
21
24
22
25
@@ -38,6 +41,7 @@ def findMedianSortedArrays(self, nums1, nums2):
38
41
len2 = len (nums2 )
39
42
40
43
if (len1 + len2 ) % 2 is 0 :
44
+ return (self .__findKth (4 , nums1 , nums2 ))
41
45
return (self .__findKth ((len1 + len2 ) / 2 + 1 , nums1 , nums2 ) + self .__findKth ((len1 + len2 ) / 2 , nums1 ,
42
46
nums2 )) / 2.0
43
47
else :
@@ -55,22 +59,21 @@ def __findMedian(li):
55
59
def __findKth (k , l1 , l2 ):
56
60
l1_start = 0
57
61
l2_start = 0
58
- k -= 1
59
- while (len (l1 ) + len (l2 ) - l1_start - l2_start - 1 ) >= k :
60
- if k is 0 :
62
+ while (len (l1 ) + len (l2 ) - l1_start - l2_start ) >= k :
63
+ if k is 1 :
61
64
return min (l1 [l1_start ], l2 [l2_start ])
62
65
if len (l1 ) - l1_start < len (l2 ) - l2_start :
63
- l1_comp_start = l1_start + min (len (l1 ), k / 2 )
64
- l2_comp_start = k - min (len (l1 ), k / 2 ) + l2_start
66
+ l1_comp_start = l1_start + min (len (l1 ) - l1_start , k / 2 )
67
+ l2_comp_start = k - min (len (l1 ) - l1_start , k / 2 ) + l2_start - 1
65
68
else :
66
- l2_comp_start = min (len (l2 ), k / 2 ) + l2_start
67
- l1_comp_start = k - min (len (l2 ), k / 2 ) + l1_start
69
+ l2_comp_start = min (len (l2 ) - l2_start , k / 2 ) + l2_start
70
+ l1_comp_start = k - min (len (l2 ) - l2_start , k / 2 ) + l1_start - 1
68
71
69
72
if l1 [l1_comp_start ] > l2 [l2_comp_start ]:
70
- k -= (l2_comp_start - l2_start )
73
+ k -= (l2_comp_start - l2_start + 1 )
71
74
l2_start = l2_comp_start + 1
72
75
elif l1 [l1_comp_start ] < l2 [l2_comp_start ]:
73
- k -= (l1_comp_start - l1_start )
76
+ k -= (l1_comp_start - l1_start + 1 )
74
77
l1_start = l1_comp_start + 1
75
78
else :
76
79
return l1 [l1_comp_start ]
@@ -79,7 +82,7 @@ def __findKth(k, l1, l2):
79
82
80
83
def main ():
81
84
print (Solution ().findMedianSortedArrays ([0 , 1 , 2 , 3 , 4 ], [0 , 1 , 2 ])) # 1
82
- print (Solution ().findMedianSortedArrays ([], [1 ])) #
85
+ # print(Solution().findMedianSortedArrays([], [1])) #
83
86
84
87
85
88
if __name__ == "__main__" :
0 commit comments