Java利用二维数组判断节假日_《剑指offer》面试题3 二维数组中的查找 Java版
(二維數組,每行遞增,每列遞增。輸入二維數組和一個整數,判斷數組中是否含有此數。)
我的方法:拿到題目,根據題目條件我提取出這樣一個特性:一個數的右邊和下面的數都比它大。于是就可以寫出一種遞歸的方法:從左上角開始尋找,針對當前被檢查的數字,如果相等返回true;如果小于target我們繼續向右和向下尋找;如果大于target就不必繼續尋找下去了(因為我們向右或向下尋找只會繼續增大)。
public class SearchIn2DArray {
public static boolean find(int[][] a, int target){
// 指針為空 或者 {}或者{{}}
if(a == null || a.length == 0 || (a.length == 1 && a[0].length == 0)){
return false;
}
return search(a, target, 0, 0);
}
private static boolean search(int[][] a, int target, int row, int col){
if(row >= a.length || col >= a[0].length){
return false;
}
if(a[row][col] > target){
return false;
}else if(a[row][col] == target){
return true;
}else return search(a, target, row+1, col) || search(a, target, row, col+1);
}
}
書中方法:解決復雜問題,一個很有效的方法是從一個具體的問題入手,通過分析簡單的例子,尋找到普通的規律。書上的思路是從右上角開始,向左或者向下去尋找目標,也是利用了左邊的數字比當前數字小,下面的數字比當前數字大這個特點。
public class SearchIn2DArray {
public boolean find2(int[][] a, int target){
if(a == null || a.length == 0 || (a.length == 1 && a[0].length == 0)){
return false;
}
int rowNow = 0;
int colNow = a[0].length-1;
while(rowNow < a.length && colNow >= 0){
if(a[rowNow][colNow] == target){
return true;
}else if(a[rowNow][colNow] > target){
rowNow ++;
}else if(a[rowNow][colNow] < target){
colNow --;
}
}
return false;
}
}
總結
以上是生活随笔為你收集整理的Java利用二维数组判断节假日_《剑指offer》面试题3 二维数组中的查找 Java版的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python61到08使用说明书_pyt
- 下一篇: 悲观锁和乐观锁_带你了解MySQL中的乐