用递归查找有序二维数组的方法详解
2018-10-12 13:51
501 查看
假设给定一个有序二维数组,每一行都是从左到右递增,每一列都是从上到下递增,如何完成一个函数,输入这样一个二维数组和一个整数,判断这个整数是否在这个二维数组中。
假设一个4×4的有序二维数组:
1 2 8 9
2 4 9 12
4 7 10 13
6 8 11 15
要查找的数字为6。
算法的核心思想是,先取最左上角的数字9,因为9比6大,所以可以排除比9大的数字,也就是第四列,然后取8,同理排除第三列,再取2,比6小,可排除比2小的数字,也就是第一行,同理取4,排除第二行,取7,排除第二列,取4,排除第三行,取6,相等,返回true。
这里我们用递归实现,代码为:
测试代码为:
测试代码运行结果为:
假设一个4×4的有序二维数组:
1 2 8 9
2 4 9 12
4 7 10 13
6 8 11 15
要查找的数字为6。
算法的核心思想是,先取最左上角的数字9,因为9比6大,所以可以排除比9大的数字,也就是第四列,然后取8,同理排除第三列,再取2,比6小,可排除比2小的数字,也就是第一行,同理取4,排除第二行,取7,排除第二列,取4,排除第三行,取6,相等,返回true。
这里我们用递归实现,代码为:
public class FindMatrixNumber {
private static FindMatrixNumber instance;
private static boolean found = false;
public static FindMatrixNumber getInstance() {
if (instance == null) {
instance = new FindMatrixNumber();
}
return instance;
}
public static boolean find(int matrix[][], int number) {
if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
return false;
} else {
System.out.println("****Start finding****");
findMatrixNumber(matrix, matrix.length, 0, matrix[0].length,
number);
System.out.println("*****End finding*****");
}
return found;
}
private static void findMatrixNumber(int matrix[][], int rows, int row,
int columns, int number) {
if (row > rows - 1)
return;
int cornerNumber = matrix[row][columns - 1];
System.out.println(cornerNumber);
if (cornerNumber == number) {
found = true;
return;
} else if (cornerNumber < number) {
findMatrixNumber(matrix, rows, ++row, columns, number);
} else if (cornerNumber > number) {
findMatrixNumber(matrix, rows, row, --columns, number);
}
}
}
测试代码为:
public class TestFindMatrixNumber {
public static void main(String[] args) {
int matrix[][] = {{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}};
System.out.println(FindMatrixNumber.find(matrix, 6));
}
}
测试代码运行结果为:
****Start finding****
9
8
2
4
7
4
6
*****End finding*****
true
您可能感兴趣的文章:
相关文章推荐
- 用递归方法在有序表中二分查找(折半查找)
- 【剑指offer】【二维数组中的查找】【有序二维数组整数查找】【判断二维数组是否为空方法】
- 二分查找的循环和递归方法
- Python实现二维有序数组查找的方法
- [数据结构]10.2实现binary search tree的查找和插入操作,用非递归的方法实现
- 每天一道LeetCode-----在有序的二维数组中查找某个元素
- c++实现二叉树的查找,插入,删除,深度,叶子节点数,度为1的节点数(递归方法)及运行实例结果
- 二分查找的递归方法python
- 剑指offer第3题——>有序二维数组的查找
- 有序二维数组查找元素
- 我的公共子字符串查找方法,非递归实现或者可以说没有实现递归
- C语言二叉树常见操作详解【前序,中序,后序,层次遍历及非递归查找,统计个数,比较,求深度】
- JAVA 的递归方法查找目录下的文件和文件夹
- Android数据库中查找一条数据 query方法详解
- c++实现二叉树的查找,插入,删除,深度,叶子节点数,度为1的节点数(递归方法)及运行实例结果
- 在查找有序二维数组中查找元素
- js处理自己不能定义二维数组的方法详解
- 链表面试题之合并有序的两个线性表-递归和非递归的方法
- PHP+JS无限级可伸缩菜单详解(递归方法)
- IMWeb提升营Day1 | 训练题1:有序二维数组的查找