算法练习:查找二维数组中的目标值
2024-01-10 06:11:24
题目:
- 编写一个高效的算法来搜索矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:
- 每行的元素从左到右升序排列。
- 每列的元素从上到下升序排列。
实现:
1. main方法
public static void main(String[] args) {
int[][] matrix = {
{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}
};
// 方式一:暴力破解
boolean b = method1(matrix, 5);
System.out.println(b);
// 方式二:二叉树原理查找
method2(matrix, 5);
}
2. 方式一:暴力破解(不推荐)
/**
* 方式一:暴力破解
* @param matrix
* @param i
*/
private static boolean method1 ( int[][] matrix, int i){
// 方式一:暴力破解
// 遍历矩阵,找到对应元素即可,不推荐:时间复杂度O(n^2)
int row = matrix.length;
int col = matrix[0].length;
for (int j = 0; j < row; j++) {
for (int k = 0; k < col; k++) {
if (matrix[j][k] == i) {
System.out.println("way1: {" + j + "," + k + "}");
return true;
}
}
}
return false;
}
}
3. 方式二: 二叉树原理查找
/**
* 方式二:二叉树原理查找
*
* @param matrix
* @param target
*/
private static boolean method2(int[][] matrix, int target) {
// 方式二:二叉树原理查找
// 从左下角开始查找,如果当前元素大于目标值,则向上查找,如果当前元素小于目标值,则向右查找
// 时间复杂度:O(m+n)
int row = matrix.length - 1; // 行
int col = 0; // 列
while (col < matrix[0].length && row >= 0) {
// 相等则返回
if (matrix[row][col] == target) {
System.out.println("way2: {" + row + "," + col + "}");
return true;
} else if (matrix[row][col] > target) { // 如果当前元素大于目标值,则向上查找
row--;
} else if (matrix[row][col] < target) { // 如果当前元素小于目标值,则向右查找
col++;
}
}
return false;
}
文章来源:https://blog.csdn.net/m0_72560900/article/details/135492946
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!