題目描述:
給定兩個大小為 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...