給定兩個大小為 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...