28 搜尋二維矩陣

2021-07-31 10:51:07 字數 1474 閱讀 6920

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