二维数组binary search用Java编写
时间: 2024-04-30 15:20:33 浏览: 74
下面是一个简单的 Java 实现二维数组二分查找的示例代码:
```java
public class BinarySearch2D {
public static boolean search(int[][] matrix, int target) {
int m = matrix.length;
if (m == 0) {
return false;
}
int n = matrix[0].length;
int left = 0, right = m * n - 1;
while (left <= right) {
int mid = (left + right) / 2;
int midValue = matrix[mid / n][mid % n];
if (midValue == target) {
return true;
} else if (midValue < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return false;
}
}
```
其中,`search` 方法接收一个二维数组 `matrix` 和一个目标值 `target`,返回一个布尔值表示目标值是否存在于数组中。
首先,我们获取数组的行数 `m` 和列数 `n`。然后,我们使用二分查找的思想来查找目标值。我们定义一个 `left` 变量表示左边界,初始值为 0;定义一个 `right` 变量表示右边界,初始值为 `m * n - 1`,即数组中最后一个元素的索引。在每次循环中,我们计算中间元素的索引 `mid`,并获取中间元素的值 `midValue`。如果 `midValue` 等于 `target`,说明目标值存在于数组中,返回 `true`。如果 `midValue` 小于 `target`,说明目标值在中间元素的右边,更新左边界为 `mid + 1`。如果 `midValue` 大于 `target`,说明目标值在中间元素的左边,更新右边界为 `mid - 1`。如果最终未找到目标值,返回 `false`。
使用示例:
```java
int[][] matrix = {
{1, 3, 5, 7},
{10, 11, 16, 20},
{23, 30, 34, 50}
};
int target = 3;
boolean result = BinarySearch2D.search(matrix, target);
System.out.println(result); // true
```
阅读全文