寫出乙個高效的演算法來搜尋 m × n矩陣中的值。
這個矩陣具有以下特性:
[
[1, 4, 7, 11, 15],
[2, 5, 8, 12, 19],
[3, 6, 9, 16, 22],
[10, 13, 14, 17, 24],
[18, 21, 23, 26, 30]
]
查詢17,return true; 查詢20,return false。
思路:由例子可以看出所有數字的左邊那個數總是小於本身,下方那個數總是大於本身。因此,我們可以從陣列的右上角那個數出發逐步尋找我們所需要找的數:如果目標小於當前數字,我們必定不希望當前數字變得更大,所以應該把當前數字變為自己左邊的那個數(較小的那個數);反之則變成下方那個數(較大的數)。當這個數字成功被找到則返回true,當當前數字的橫縱座標超出範圍還沒有找到這個數,則返回false。
**:
public class solution
int row = 0, col = array[0].length - 1;
while (row <= array.length - 1 && col >= 0) else if (array[row][col] > target) else
row++;
} return false;
}}
面試題21 二維陣列搜尋
題目 設計乙個演算法對 m n 矩陣進行搜尋,這個矩陣擁有如下屬性.1 每行的數都是從左到右排序好的.2 每行的首數大於上行的尾數.其實這題就是用二分查詢演算法,二分查詢一般是在一維陣列上進行搜尋,解決這道題的關鍵就是如何將二維陣列對映成一維陣列.對映關係為 k i n j,j 實現 package...
面試題3 二維陣列的查詢
一種思路是 利用二維陣列由上到下,由左到右遞增的規律,那麼選取右上角或者左下角的元素a row col 與target進行比較,當target小於元素a row col 時,那麼target必定在元素a所在行的左邊,即col 當target大於元素a row col 時,那麼target必定在元素a...
面試題3 二維陣列中的查詢
題目描述 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。輸入 輸入可能包含多個測試樣例,對於每個測試案例,輸入的第一行為兩個整數m和n 1 m,n 1000 代表將要輸入的矩陣的行...