38 搜尋二維矩陣

2022-05-12 02:33:40 字數 1577 閱讀 3801

原題**:

38. 搜尋二維矩陣 ii 

討論區 

寫出乙個高效的演算法來搜尋m×n矩陣中的值,返回這個值出現的次數。

這個矩陣具有以下特性:

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

yes樣例考慮下列矩陣:

[

[1, 3, 5, 7],

[2, 4, 7, 8],

[3, 5, 9, 10]

]

給出target =3,返回2

挑戰

要求o(m+n) 時間複雜度和o(1) 額外空間

標籤

亞馬遜矩陣

sorted matrix

谷歌非挑戰版思路:

腦子驢了,看到排序陣列(矩陣)的搜尋問題第一時間想到的就是二分查詢法……對每行進行二分查詢統計個數,時間複雜度o(m×log(n))。

ac**:

class

solution

int result=0

;

int rowsize=matrix.size();

int colsize=matrix[0

].size();

if (target0][0]||target>matrix[rowsize-1][colsize-1

])

for (int i=0;i)

else

if (targetelse}}

return

result;

}};

挑戰版  參考:

可以多看幾遍

利用給定矩陣的特點,可以從右上角走到左下角,也可以從左下角走到右上角。這樣每次移動時要麼剔除當前行要麼剔除當前列。

第一種,若當前點大於target,當前列-1,即判斷matrix【row】【col-1】;

若當前點小於target,當前行+1,即判斷matrix【row+1】【col】;

若當前點等於target,計數器加1,然後當前行+1,當前列-1;

重複以上步驟直到左下角。

ac**:

class

solution

int result=0

;

int rowsize=matrix.size();

int colsize=matrix[0

].size();

if (target0][0]||target>matrix[rowsize-1][colsize-1

])

int i=0,j=colsize-1

;

while(i>=0&&i=0&&jelse

if (matrix[i][j]else

}return

result;

}};

lintcode 38 搜尋二維矩陣 II

寫出乙個高效的演算法來搜尋m n矩陣中的值,返回這個值出現的次數。這個矩陣具有以下特性 每行中的整數從左到右是排序的。每一列的整數從上到下是排序的。在每一行或每一列中沒有重複的整數。樣例例1 輸入 3 4 target 3輸出 1例2 輸入 1,3,5,7 2,4,7,8 3,5,9,10 targ...

搜尋二維矩陣

寫出乙個高效的演算法來搜尋 m n矩陣中的值。這個矩陣具有以下特性 每行中的整數從左到右是排序的。每行的第乙個數大於上一行的最後乙個整數。樣例 考慮下列矩陣 1,3,5,7 10,11,16,20 23,30,34,50 給出 target 3,返回 true 思路一 最容易想到的一種解法就是兩層f...

搜尋二維矩陣

寫出乙個高效的演算法來搜尋 m n矩陣中的值。這個矩陣具有以下特性 樣例 考慮下列矩陣 1,3,5,7 10,11,16,20 23,30,34,50 給出target 3,返回true 解題思路 可以把這個矩陣,看成是乙個大的一維陣列,1,3,5,7,10,11,16,20,23,34,50。然後...