题目描述:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解题思路:
1. 二维数组是有序的。从左下角来看,向上数字递减,向右数字递增;从右上角来看,向下数字递增,向左数字递减。
2. 因此可以从左下角或者右上角开始查找。从左下角查找,当要查找数字比左下角数字大时,右移;当要查找数字比左下角数字小时,上移。
3. 从右上角查找,当要查找数字比右上角数字大时,下移;当要查找数字比右上角数字小时,左移。
代码:
1 public boolean Find(int target, int [][] array) { 2 3 // 二维数组的行数和列数 4 int rowCount = array.length; 5 int colCount = array[0].length; 6 // 从左下角开始查找 7 for(int i = rowCount-1,j = 0;i >= 0 && j <= colCount-1;){ 8 if (target == array[i][j]){ 9 return true; 10 } 11 if (target < array[i][j]){ 12 // 上移 13 i--; 14 continue; 15 } 16 if(target > array[i][j]){ 17 // 右移 18 j++; 19 continue; 20 } 21 } 22 return false; 23 }