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

2021-09-08 05:22:47 字數 2578 閱讀 6766

題目描述:

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

我的思路沒有那麼複雜,就是將兩個陣列進行拼接,然後排序,最後取出中間的那個數字,當然我們要判斷是偶數還是奇數

這種方法雖然容易懂,但是效率就比較低了

**:

class solution else  }}

但是乍一看還是可以的

排名靠前的**,注意要利用有序這個條件來進行,我上面那個**就沒有考慮有序這個條件,因此要重複利用題目已給的條件,從而降低複雜度

class solution 

r[index] = num;

index++;

} for (; j < nums2length; j++)

int mi = r.length / 2;

return r.length % 2 == 1 ? r[mi] : (r[mi - 1] + r[mi]) / 2.0;

}}

官方題解的**:

class solution 

int imin = 0, imax = m, halflen = (m + n + 1) / 2;

while (imin <= imax)

else if (i > imin && a[i-1] > b[j])

else

else if (j == 0)

else

if ( (m + n) % 2 == 1 )

int minright = 0;

if (i == m)

else if (j == n)

else

return (maxleft + minright) / 2.0;}}

return 0.0;}}

2023年9月10日重置版本

public double findmediansortedarrays(int nums1, int nums2) 

index1++;

index++;

} else

index2++;

index++;}}

if (pre == integer.min_value)

pre = nums2[index2];

index2++;

} else

pre = nums1[index1];

index1++;}}

if (index1 < nums1.length && index2 < nums2.length) else if (index1 >= nums1.length) else

return (last + pre) / 2.0;

} else

index1++;

index++;

} else

index2++;

index++;}}

if (pre == integer.min_value)

pre = nums2[index2];

index2++;

} else

pre = nums1[index1];

index1++;}}

return pre;

} }

大概寫了五十分鐘吧,還是對於邊界的不熟悉

這次的效率

看看官方的二分法:

二分法解釋

class solution 

int imin = 0, imax = m;

while (imin <= imax)

else if (i != 0 && j != n && a[i-1] > b[j])

else

else if (j == 0)

else

if ( (m + n) % 2 == 1 ) // 奇數的話不需要考慮右半部分

int minright = 0;

if (i == m)

else if (j == n)

else

return (maxleft + minright) / 2.0; //如果是偶數的話返回結果}}

return 0.0;}}

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

尋找兩個有序陣列的中位數 user hihone date 2019 1 31 time 16 32 description 給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設 nums1 ...

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

思路 將兩個陣列排序,然後判斷陣列長度,長度為單數,則取二分之一處的數,否則取二分之一處和二分之一減一處的數之和除以2.var findmediansortedarrays function nums1,nums2 var mid math.floor arr.length 2 if arr.len...

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

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