1. 程式人生 > >資料結構演算法題/有序矩陣查詢

資料結構演算法題/有序矩陣查詢

在一個二維陣列中,每一行都按照從左到右遞增的順序排序,誒一列都按照從上到下遞增的順序排序,請完成一個函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中是否包含了該整數。

 

        例如下面的二維陣列就是每行、沒列都遞增排序。如果在這個陣列中查詢數字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);
    }
}

https://www.cnblogs.com/0201zcr/p/4643825.html