每天一道劍指offer-二維數組中的查找
- 2019 年 10 月 4 日
- 筆記
題目
每天一道劍指offer-二維數組中的查找 中文鏈接: http://t.cn/RdKlvjM
題目詳述
在一個二維數組中(每個一維數組的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。
題目詳解
思路
- 劍指offer的思路.就是比較矩陣的右上角的數與target的大小,如果target比這個矩陣右上角的數大,由於矩陣的右上角元素A是A所在行的最大的值,所以target肯定不在A所在的行了,所以這時候就應該就在除去第一行的剩下的行中去找這個target;
- 如果target比矩陣右上角的數A小,那麼由於A所在的列中A是最小的,那麼target就在除去最右邊的列的其它的列; 如果相等,返回true;
public class Solution { public boolean Find(int target, int [][] array) { if(array.length == 0 || array[0].length == 0 ) return false; int rows = array.length-1; int cols = array[0].length-1; int i = 0; int j = cols; while(i <= rows && j >= 0) { if(array[i][j] < target) { i++; }else if(array[i][j] > target) { j--; }else{ return true; } } return false; } }
代碼講解
- 11-13行就是 右上角比target小,只能i++進入下一行
- 14-16行就是 右上角比target大,只能j–進入到左邊的這些列