package com.my.offer;
/**
* 二维数组的查找
* @author asus
*
*/
public class Solution01 {
/**
* 二维数组的查找:
* 从右上角开始查找,因为二维数组每行从左到右递增,每列从上
* 到下递增,因此:
* 1.当目标元素小与当前元素,则将小与当前列的所有元素,当前
* 列可以排除
* 2.当目标元素大于当前元素,则将大于当前行所有元素,当前行
* 可以排除
* 3.当目标元素等于当前元素,则找到该元素,查找结束
* @param target 目标元素
* @param matrix 二维矩阵
* @return
*/
public boolean find(int target, int[][] array) {
//边界条件判断
if(array.length == 0 || array[0].length == 0 )
return false;
//二维数组的行数,对应i
int rows = array.length - 1;
//二维数组的列数,对应j
int cols = array[0].length - 1;
//从二维数组的右上角位置开始查找
int i = 0;
int j = cols;
//边界条件
while(i <= rows && j >= 0) {
//如果目标数字大于此刻查找的数字,则必定大于此行所有数字,则行数++
if(target > array[i][j]) {
i++;
} else if(target < array[i][j]) {
//如果目标数字小于此刻查找的数字,则必定小于此列所有数字,则列数--
j--;
}else {
//否则此刻查找的数字就是目标数字
return true;
}
}
//没有查找到该数字则返回false
return false;
}
}