JZ01 - 二维数组中的查找
题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
设计思路:
1 | 5 | 9 | 13 |
---|---|---|---|
2 | 6 | 10 | 14 |
3 | 7 | 11 | 15 |
4 | 8 | 12 | 16 |
如上表:先找到一个好比较的点,二维数组中左上角的1点往下或往右都比他大,判断起来往下走还是往右走没得选择,同理右下角也是一样;要把横着走还是竖着走区分开,所以选择右上角13或者左下角4来判断,这里我选择右上角13来判断,小于往左走,大于往下走。时间复杂度O(mn),空间复杂度O(1)
/**
* @author 枫叶火火
*/
public class Solution {
public boolean Find(int target, int [][] array) {
int r = 0; //数组行
int c = array[0].length-1; //数组列
while(r < array.length && c >= 0){
if(target < array[r][c])
c--;
else if(target > array[r][c])
r++;
else
return true;
}
return false; //没找到返回false
}
}