No 4尋找兩個有序陣列的中位數

2021-09-16 19:50:48 字數 1114 閱讀 4745

給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2。

請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o(log(m + n))。

你可以假設 nums1 和 nums2 不會同時為空。

示例 1:

nums1 = [1, 3]

nums2 = [2]

則中位數是 2.0

示例 2:

nums1 = [1, 2]

nums2 = [3, 4]

則中位數是 (2 + 3)/2 = 2.5

本題難點:演算法複雜度有限制(log(n))。不能使用簡單的列表合併再排序。給出的解法是,新建列表。比較兩個列表。較小的放入。注意新列表的初始化為0.還有列表乙個為空後。另乙個的判斷。把後續放入列表。還有就是注意。求中位數的時候,考慮到列表座標從零開始。需要len()減一。還要注意最後輸出的是浮點型。//和/的區別。前乙個整除。後乙個float型。

解題:

class solution:

def findmediansortedarrays(self, nums1: list[int], nums2: list[int]) -> float:

#建立新列表,並將所有元素初始化為0

nums3 = [0] * (len(nums1)+len(nums2))

l_i,r_i,i = 0,0,0

while(l_iif nums1[l_i] < nums2[r_i]:

nums3[i] = nums1[l_i]

l_i += 1

else:

nums3[i] = nums2[r_i]

r_i += 1

i += 1

if l_i != len(nums1):

nums3[i:] = nums1[l_i:]

else:

nums3[i:] = nums2[r_i:]

len_3 = len(nums3)

if len_3 % 2 != 0 :

return float(nums3[(len_3-1)//2])

return (nums3[(len_3)//2-1]+nums3[(len_3)//2])/2

4 尋找兩個有序陣列的中位數

給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設 nums1 和 nums2 不會同時為空。示例 1 nums1 1,3 nums2 2 則中位數是 2.0 示例 2 nums1 1,2 ...

4 尋找兩個有序陣列的中位數( )

給定兩個大小為 m 和 n 的有序陣列nums1和nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設nums1和nums2不會同時為空。示例 1 nums1 1,3 nums2 2 則中位數是 2.0 示例 2 nums1 1,2 nums2 3...

4 尋找兩個有序陣列的中位數

給定兩個大小為 m 和 n 的有序陣列nums1和nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設nums1和nums2不會同時為空。示例 1 nums1 1,3 nums2 2 則中位數是 2.0 示例 2 nums1 1,2 nums2 3...