5.2
可能是剛開始想複雜了吧。
大致思路就是先確定某一行,再確定這一行中是不是含有就可以了。
確定列的時候採用二分查詢是沒有問題的。
在查詢行的時候也想用二分查詢,但是出現了一些問題,查詢不準確。
後來想,就是找到首元素小於target的最大值那一行就可以了。
然後後來在判斷一下。如果 nums【行】【尾元素】的值 < target,行 ++; 如果【行】【首元素】的值 > targer,行- -。
這樣對於行的查詢就更準確了。
可能比較笨吧。
public class solution
int m = matrix.length;
if(m == 0)
int n = matrix[0].length;
if(n == 0)
"m" + m);
if(target < matrix[0][0] || target >matrix[m-1][n-1])
int low = 0;
int height = m-1;
int mid1 = 0;
//這裡先找到某一行,這一行的頭元素是最大的小於target的值
/*就是先要把行確定了
如果查詢 行 也採用二分查詢的話
二分查詢的原則是什麼呢?
如果 行的尾元素是小於 mid 的值
那就 ++;
或者說,其實也沒有那麼複雜
就是找到 小於 target 的最大值,返回那一行就可以了。
*/while(low < height)
mid1 = (low + height)/2;
if(matrix[mid1][0] == target)
if(matrix[mid1][0] > target)
if(matrix[mid1][0] < target)
}if(matrix[mid1][0] > target)
if(matrix[mid1][n-1] < target)
"mid1 = " + mid1);
if(matrix[mid1][n-1]==target)
int left = 0;
int right = n-1;
int mid = 0;
while(left <= right)
mid = (left + right)/2;
if(matrix[mid1][left] == target || matrix[mid1][right] == target)
if(matrix[mid1][mid] == target)
if(matrix[mid1][mid] < target)
if(matrix[mid1][mid] > target)
}return false;
// write your code here
}}
28 搜尋二維矩陣
原題 寫出乙個高效的演算法來搜尋 m n矩陣中的值。這個矩陣具有以下特性 您在真實的面試中是否遇到過這個題?yes樣例考慮下列矩陣 1,3,5,7 10,11,16,20 23,30,34,50 給出target 3,返回true 挑戰 o log n log m 時間複雜度 include inc...
LintCode 28 搜尋二維矩陣
寫出乙個高效的演算法來搜尋 m n矩陣中的值。這個矩陣具有以下特性 每行中的整數從左到右是排序的。每行的第乙個數大於上一行的最後乙個整數。樣例 考慮下列矩陣 1,3,5,7 10,11,16,20 23,30,34,50 給出 target 3,返回 true 挑戰 o log n log m 時間...
《Lintcode簽到》 28 搜尋二維矩陣
寫出乙個高效的演算法來搜尋 m n矩陣中的值。這個矩陣具有以下特性 每行中的整數從左到右是排序的。每行的第乙個數大於上一行的最後乙個整數。樣例樣例 1 輸入 5 2 輸出 false 樣例解釋 沒有包含,返回false。樣例 2 輸入 1,3,5,7 10,11,16,20 23,30,34,50 ...