题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下的顺序排序,请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否包含该正数。
public class 数组{
/**
*
* [ 1 2 3 ]
* [ 2 9 18 ]
* [ 3 10 21 ]
*
* @param arrays
* @param num
* @return
*/
public boolean isContain(int[][] arrays, int num) {
int column = arrays.length - 1; //列
int row = 0; //行
while (column >= 0 && row < arrays[0].length) {
if (arrays[column][row] == num) {
return true;
} else if (arrays[column][row] > num) {
column--;
} else {
row++;
}
}
return false;
}
@Test
public void test() {
int[][] arrays = {{1, 2, 3}, {2, 9, 18}, {3, 10, 21}};
boolean isContain = isContain(arrays, 18);
System.out.println(" is contain "+isContain);
}
}
解题思路:从【最后一列】【第一行】开始往前找,当取出的数据大于要查找的数字时,说明该数字在【这一列】的前面,column–,反之,说明该数字在【这一列】的下方,row ++;反复向前、向下查找,范围在列上不能小于第一列,即【column>=0】,行上,不能大于最后一行,即【row < array[0].length】,如果都没找到,跳出循环,返回false。