28 搜尋二維矩陣

2022-05-12 02:56:58 字數 1881 閱讀 9918

原題**:

寫出乙個高效的演算法來搜尋 m × n矩陣中的值。

這個矩陣具有以下特性:

您在真實的面試中是否遇到過這個題? 

yes樣例考慮下列矩陣:

[

[1, 3, 5, 7],

[10, 11, 16, 20],

[23, 30, 34, 50]

]

給出target = 3,返回true

挑戰

o(log(n) + log(m)) 時間複雜度

#include #include 

#include

#include

#include

using

namespace

std;

//方法一:展開成一維陣列,二分法查詢;

bool searchmatrix(vectorint>> &matrix, int

target)

int row=matrix.size();

int col=matrix[0

].size();

if (target0][0]||target>matrix[row-1][col-1

])

vector

temp;

for (int i=0;i)

}//二分法查詢;

int size=temp.size();

int count=0

;

int max=size-1,mid=size/2,min=0; //

mid=(max+min)/2;

while(count!=size)

else

if (targetelse

mid=(max+min)/2

; count ++;

}return

false;}

//方法二:對行和列分別進行二分法查詢;

bool searchmatrix_w(vectorint>> &matrix, int

target)

int row=matrix.size();

int col=matrix[0

].size();

if (target0][0]||target>matrix[row-1][col-1

])

//二分法查詢行;

int rowindex=0

;

int rowlow=0,rowhigh=row-1,rowmid=(rowhigh+rowlow)/2

;

while(rowlow<=rowhigh)

else

if (target>matrix[rowmid][0]&&target1

])

else

if (targetmatrix[rowmid][0

])

else

rowmid=(rowhigh+rowlow)/2

; }

//二分法查詢列;

int collow=0,colhigh=col-1,colmid=(colhigh+collow)/2

;

while(collow<=colhigh)

else

if (targetelse

colmid=(colhigh+collow)/2

; }

return

false

;}

參考:1 

28 搜尋二維矩陣

5.2 可能是剛開始想複雜了吧。大致思路就是先確定某一行,再確定這一行中是不是含有就可以了。確定列的時候採用二分查詢是沒有問題的。在查詢行的時候也想用二分查詢,但是出現了一些問題,查詢不準確。後來想,就是找到首元素小於target的最大值那一行就可以了。然後後來在判斷一下。如果 nums 行 尾元素...

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