java 劍指offer 第一題:在一個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中是否含有該整數。
阿新 • • 發佈:2019-01-02
我用了三種解法,全部都可以在牛客網上通過。
第一種解法是最簡單的,遍歷整個二維陣列找那個整數;
第二種和第三種都是根據二維陣列有序的特性進行查詢,第二種方法是從左下角開始查詢,大於左下角刪除一行,小於左下角刪除一列;第三種是從右上角開始查詢,大於右上角刪除一行,小於右上角的刪除一列。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; } }