下面来详细讲解如何用Java实现二维数组查找功能的代码。
算法思路
二维数组(也叫矩阵)是由若干个一维数组组成的数据结构,我们可以将其看成一个具有行列特性的表格。要实现查找功能,我们可以从左上角(或者右下角)开始逐行逐列地查找,找到目标数就返回 true,否则返回 false。
具体实现步骤如下:
- 从左上角开始查找,设当前位置为
(i, j)
,若该位置的值a[i][j]
大于目标数,则直接返回 false。 - 若该位置的值小于目标数,则往右查找,即令
j++
,继续判断a[i][j]
的值。 - 如果在某一行中找到了目标数,则返回 true。
- 如果往右到达了最后一列仍未找到目标数,就往下查找,即令
i++
,继续从该行的第一个位置开始查找。 - 重复第二、三、四步,直到找到目标数或遍历完整个矩阵。
代码实现
下面是 Java 语言实现二维数组查找功能的代码示例:
public boolean searchMatrix(int[][] matrix, int target) {
if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
return false;
}
int m = matrix.length, n = matrix[0].length;
int i = 0, j = n - 1; // 从矩阵右上角开始查找
while (i < m && j >= 0) {
if (matrix[i][j] == target) {
return true;
} else if (matrix[i][j] > target) {
j--; // 当前值比目标值大,向左移动
} else {
i++; // 当前值比目标值小,向下移动
}
}
return false; // 没有找到目标值
}
这个方法的时间复杂度是 $O(m+n)$,其中 $m$ 和 $n$ 是矩阵的行数和列数,空间复杂度是常数级别,只需要几个辅助变量。
接下来,我们来看两个具体的应用场景:
示例 1:在二维矩阵中查找目标数
假如现在有一个二维矩阵如下:
1 3 5 7
10 11 16 20
23 30 34 60
我们需要在这个矩阵中查找一个目标数,比如 16
。
我们可以按照上述代码实现过程,从矩阵右上角开始查找,即 (i, j) = (0, 3)
开始查找,根据二维数组查找的规则,如果比目标数大就向左移动,如果比目标数小就向下移动,直到找到目标数或者遍历完整个矩阵。
代码实现如下:
int[][] matrix = {
{1, 3, 5, 7},
{10, 11, 16, 20},
{23, 30, 34, 60}
};
int target = 16;
boolean isFound = searchMatrix(matrix, target);
System.out.println(isFound); // true
运行结果为 true
,表示已经找到了目标数。
示例 2:判断二维数组中是否包含某一行
假设现在有一个 $m \times n$ 的二维矩阵 matrix
,我们需要判断其中是否包含某一行 row
。
我们可以按照行来遍历这个二维矩阵,对于每一行都按照上述算法来查找目标数,如果找到了就说明包含该行。
代码实现如下:
int[][] matrix = {
{1, 3, 5, 7},
{8, 10, 11, 16},
{23, 30, 34, 60}
};
int m = matrix.length, n = matrix[0].length;
int[] row = {8, 10, 11, 16};
boolean isFound = false;
for (int i = 0; i < m && !isFound; i++) {
if (matrix[i][0] <= row[0] && matrix[i][n - 1] >= row[n - 1]) {
// 假设该行是升序的
isFound = searchMatrix(matrix, row, i);
}
}
System.out.println(isFound); // true
这里需要定义一个 searchMatrix()
方法,用来查找一行是否相等:
private static boolean searchMatrix(int[][] matrix, int[] row, int i) {
int n = matrix[0].length, j = 0;
while (j < n && matrix[i][j] == row[j]) {
j++;
}
return j == n;
}
运行结果为 true
,表示该二维矩阵包含了目标行。
总结
以上就是 Java 实现二维矩阵查找功能的完整攻略,核心思路就是从右上角开始查找,找到就返回 true,没找到就继续往左或者往下查找。代码实现不难,但是需要注意细节,比如空指针判断,边界条件等。在实际应用中,可以根据具体需求来调整算法实现的细节和逻辑。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java二维数组查找功能代码实现 - Python技术站