描述
给定一个二维数组,其每一行从左到右递增排序,从上到下也是递增排序。
给定一个数,判断这个数是否在该二维数组中。
例子
Input:
数组:
{
{1, 4, 7, 11, 15},
{2, 5, 8, 12, 19},
{3, 6, 9, 16, 22},
{10, 13, 14, 17, 24},
{18, 21, 23, 26, 30},
};
目标值:24
Output:
2
思路
由于每一行从左到右递增排序,从上到下也是递增排序,故可以从右上角开始遍历,若大于目标值,列减1;若小于目标值,行加1;若等于则成功找到。
代码
public class Question002 {
public static void main(String[] args) {
int target = 24;
int [][] array = new int [][]{
{1, 4, 7, 11, 15},
{2, 5, 8, 12, 19},
{3, 6, 9, 16, 22},
{10, 13, 14, 17, 24},
{18, 21, 23, 26, 30},
};
int row = 0, col = array.length-1;
while(row < array[0].length && col > 0) {
if (array[row][col] < target) {
row++;
} else if(array[row][col] > target){
col--;
} else {
System.out.println("true");
break;
}
}
if (row >= array[0].length || col <= 0){
System.out.println("false");
}
}
}