官方題解:https://leetcode-cn.com/problems/median-of-two-sorted-arrays/solution/xun-zhao-liang-ge-you-xu-shu-zu-de-zhong-wei-shu-b/
class Solution {
public:double findMedianSortedArrays(vector<int>& A, vector<int>& B) {int m = A.size();int n = B.size();if(m > n){vector<int> temp = A;A = B;B = temp;m = A.size();n = B.size();}int iMin = 0, iMax = m, halfLen = (n + m + 1)/2;while(iMin <= iMax){int i = (iMin+iMax)/2; //0 <= i <= m;int j = halfLen - i; //i + j = m - i + n - j 或 i + j = m - i + n - j + 1if(i < iMax && B[j-1] > A[i]){//i < m ==> j > 0//并且m < n ==> j <= n iMin = i + 1; //too small}else if(i > iMin && A[i-1] > B[j]){//i > 0 ==> j < n//并且m < n ==> j >= 0 iMax = i - 1; //too big}else{double maxLeft = 0;if(i == 0){ maxLeft = B[j-1]; }else if(j == 0) { maxLeft = A[i-1]; }else { maxLeft = max(A[i-1], B[j-1]); }if ( (m + n) % 2 == 1 ) { return maxLeft; }int minRight = 0;if(i == m) { minRight = B[j]; }else if(j == n){ minRight = A[i]; }else { minRight = min(A[i], B[j]); }return (maxLeft + minRight)/2.0;}}return 0.0;}
};
if(i < iMax && B[j-1] > A[i]){//i < m ==> j > 0 //并且m < n ==> j <= n iMin = i + 1; //too small}
由i < m ==> j > 0
,但是,這個時候j
會大于n
嗎?
不會,因為i
是大于等于0
小于等于m
的,由m <= n
(一開始保證了) 可以推出j < = n
,因為i
越小,j
就越大,i == 0
時,j
最大,j = (m + n + 1) /2 - 0 <= (2n + 1)/2 <= n
(int運算)
else if(i > iMin && A[i-1] > B[j]){//i > 0 ==> j < n//并且m < n ==> j >= 0 iMax = i - 1; //too big}
c語言刷leetcode。這個也是同理,由i > 0 ==> j < n
,由m < n ==> j >= 0
,因為i
越大,j
就越小,i == m
時,j
最大,j = (m + n + 1) /2 - m >= (n - m + 1)/2 >= 0
(int運算,m <= n
)
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态