c++解法:(將兩個陣列從小到大遍歷到中間)
class solution
else
} if (length_nums2 == 0) //如果陣列nums2為空,直接返回nums1的中位數
else
} //如果都不為空
int idx_nums1 = 0;
int idx_nums2 = 0;
vectorresult;//定義結果陣列變數
double result_value = 0;//定義結果值變數
int num1, num2;
while (true)
else if (idx_nums1 == length_nums1 && idx_nums2 < length_nums2)
else if (idx_nums1 < length_nums1 && idx_nums2 == length_nums2)
//開始比較,依次將較小的數字放入result陣列
if (num1 <= num2)
else
//整理新的有序陣列, 輸出結果
int result_length = result.size();//計算結果陣列的長度
if ((result_length - 1) == (length_nums1 + length_nums2) / 2)
else
break;//退出while迴圈
} } return result_value;//輸出結果值
}};
python3解法:(參考:官方解答:遞迴法)
class solution:
def findmediansortedarrays(self, nums1: list[int], nums2: list[int]) -> float:
m, n = len(nums1), len(nums2)
if m > n:
nums1, nums2, m, n = nums2, nums1, n, m
if n == 0:
raise valueerror
imin, imax, half_len = 0, m, (m + n + 1) // 2
while imin <= imax:
i = (imin + imax) // 2
j = half_len - i
if i < m and nums2[j-1] > nums1[i]:
# i is too small, must increase it
imin = i + 1
elif i > 0 and nums1[i-1] > nums2[j]:
# i is too big, must decrease it
imax = i - 1
else:
# i is perfect
if i == 0: max_of_left = nums2[j-1]
elif j == 0: max_of_left = nums1[i-1]
else: max_of_left = max(nums1[i-1], nums2[j-1])
if (m + n) % 2 == 1:
return max_of_left
if i == m: min_of_right = nums2[j]
elif j == n: min_of_right = nums1[i]
else: min_of_right = min(nums1[i], nums2[j])
return (max_of_left + min_of_right) / 2.0
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...