题目要求:
在一个二维数组中(每个一维数组的长度相同), 每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解决思路:
首先选取数组中右上角的数字。
如果该数字等于要查找的数字,则查找结束;
如果该数字大于要查找的数字,则剔除该数字所在的列。
如果该数字小于要查找的数字,则剔除这个数字所在的行。
即如果要查找的数字不在数组的右上角,则每次都在数组的查找范围中剔除一行或者一列,这样每步都可以缩小查找的范围,直到找到要查找的数字,或者查找范围为空。
同理,也可以选取左下角的数字。
如果该数字等于要查找的数字,则查找结束;
如果该数字大于要查找的数字,则增加该数字所在的列。
如果该数字小于要查找的数字,则增加这个数字所在的行。
即如果要查找的数字不在数组的左下角,则每次都在数组的查找范围中增加一行或者一列,这样每步都可以缩小查找的范围,直到找到要查找的数字,或者查找范围为空。
代码:
package swordOffer;
/*
* 在一个二维数组中(每个一维数组的长度相同),
* 每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。
* 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
* */
public class FindInDyadicArray {
// public static boolean Find(int target, int [][] array) {
// int totalRow = array.length;//总行数
// int totalCol = array[0].length;//总列数
// int i = totalRow - 1, j = 0;
//
// while(i >= 0 && j <= totalCol - 1) {
// if(array[i][j] == target) {
// return true;
// }else if(target > array[i][j]) {
// j++;
// }else {
// i--;
// }
// }
//
// return false;
// }
public static boolean Find(int target, int [][] array) {
int totalCol = array.length;
int totalRow = array[0].length;
int i = 0;
int j = totalCol - 1;
while(i <= totalRow-1 && j >= 0) {
if(array[i][j] == target) {
return true;
}else if(target > array[i][j]) {
i ++;
}else {
j --;
}
}
return false;
}
public static void main(String[] args) {
int [][] array = {{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}};
System.out.println(Find(7, array));
System.out.println(Find(5, array));
}
}
本文介绍了一种高效的查找算法,用于在一个特殊排序的二维数组中搜索特定整数。该算法通过逐步排除行列的方式缩小搜索范围,最终确定目标元素是否存在。

被折叠的 条评论
为什么被折叠?



