劍指Offer
題目
在一個二維數組中(每個一維數組的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。
矩陣如下:
1 2 8 9
2 4 9 12
4 7 10 3
6 8 11 15
解題思路
從右上角或者左下角找規律。
如果 查找的值大於右上角的值,向下搜索
如果 查找的值小於右上角的值,向左搜索
第一種
public class Solution {
public boolean Find(int target, int [][] array) {
if (array == null) {
return false;
}
//行長
int rLength = array.length;
if(rLength == 0) {
return false;
}
//列長
int cLength = array[0].length;
if(cLength == 0) {
return false;
}
//如果大於右下角的,返回
if (array[rLength-1][cLength-1] < target){
return false;
}
if (array[0][0] > target) {
return false;
}
//右上角節點的起始行數
int node = 0;
//從右上角開始,從右向左遍歷列
for (int i = cLength-1; i >= 0 ; i--) {
//如果等於右上角的,返回
if (array[node][i] == target){
return true;
}
//值大於右上角,向下查找
if (target > array[node][i]) {
for (int j = node ; j < rLength ; j++) {
//找到
if (array[j][i] == target){
return true;
}
//節點下移
node++;
if (target < array[j][i]) break;
}
}
//值小於右上角的,頂點左移,向左繼續搜素
}
return false;
}
}