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

2021-09-27 09:28:49 字數 1941 閱讀 3741

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...