1. 程式人生 > >java 劍指offer 第一題:在一個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中是否含有該整數。

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

我用了三種解法,全部都可以在牛客網上通過。

第一種解法是最簡單的,遍歷整個二維陣列找那個整數;

第二種和第三種都是根據二維陣列有序的特性進行查詢,第二種方法是從左下角開始查詢,大於左下角刪除一行,小於左下角刪除一列;第三種是從右上角開始查詢,大於右上角刪除一行,小於右上角的刪除一列。java程式碼如下:

public class Solution {
    public boolean Find(int target, int [][] array) {
		int rows = array.length;
        int col = array[0].length;
        
        //最簡單的查詢方法
        /*for(int i = 0;i < rows;i++){
            for(int j = 0;j < col;j++){
                if(target == array[i][j]){
                    return true;
                }
            }
        }
        return false;*/
        
        //根據有序的特性進行查詢
        /*從左下角開始查詢,大於左下角刪除一行,小於左下角刪除一列*/
        /*int i,j = 0;
        for(i = rows - 1,j = 0;i >= 0 && j < col;){
            if(target == array[i][j]){
                return true;
            }
            else if(target > array[i][j]){
                j++;
                continue;
            }
            else if(target < array[i][j]){
                i--;
                continue;
            }
        }
        return false;*/
        
        /*從右上角開始查詢,大於右上角刪除一行,小於右上角的刪除一列*/
        int i,j;
        for(i = 0,j = col - 1;j >= 0 && i < rows;){
            if(target == array[i][j]){
                return true;
            }
            else if(target > array[i][j]){
                i++;
                continue;
            }
            else if(target < array[i][j]){
                j--;
                continue;
            }
        }
        return false;
        }
}