資料結構演算法題/有序矩陣查詢
阿新 • • 發佈:2019-01-09
在一個二維陣列中,每一行都按照從左到右遞增的順序排序,誒一列都按照從上到下遞增的順序排序,請完成一個函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中是否包含了該整數。 |
例如下面的二維陣列就是每行、沒列都遞增排序。如果在這個陣列中查詢數字7,則返回true(找得到);如果查詢數字5,由於陣列不含該數字,則返回false。
1 | 2 | 8 | 9 |
2 | 4 | 9 | 12 |
4 | 7 | 10 | 13 |
6 | 8 | 11 | 15 |
解決思路 * 從右上角開始查 * 如果當前數小於需要查詢數字A,那麼刪除這一列 * 如果當前數大於需要查詢數字A,那麼刪除這一行 public class MatrixSearch { /** * 從右上角開始查 * 如果當前數小於需要查詢數字A,那麼刪除這一列 * 如果當前數大於需要查詢數字A,那麼刪除這一行 * @param num 被查詢的二維陣列 * @param rows 行數 * @param columns 列數 * @param number 要查詢的數字 * @return 是否找到要查詢的數字(number) */ public boolean find(int num[][],int number) { int rows = num.length; int columns = num[0].length; Boolean found = false; int row = 0; int column = columns - 1 ; if( rows > 0 && columns >0) { while(row < rows && column >= 0) { if(num[row][column] == number) //查詢到 { found = true; break; } else if(num[row][column] >number) { --column; //刪除列 } else { ++row; //刪除行 } } } return found; } public static void main(String[] args) { MatrixSearch matrixSearch = new MatrixSearch(); int[][] matrix = {{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}}; boolean isIn = matrixSearch.find(matrix, 10); System.out.println(isIn); } }