二维数组查找优化:定位基准值的改进算法
需积分: 1 178 浏览量
更新于2024-07-09
收藏 1.45MB DOCX 举报
"剑指offer(幸运篇)文档分享中,涉及一道关于二维数组查找的面试题。题目要求设计一个函数,在一个已按行递增、列递增排序的二维数组中寻找是否存在特定整数。解决者初步尝试通过定义二维数组,并以数组右下角的元素作为基准值进行比较,但实际上应从左下角和右上角的边界开始搜索。
思路解析:
1. 题目描述中的二维数组已经确保每行和每列都是有序的,这意味着我们可以通过双指针法来寻找目标整数。初始化两个指针,`i` 从最后一行开始(即 `m-1`)向下,`j` 从最后一列开始(即 `n-1`)向右移动。同时,设置一个标志值 `flag`,用于记录是否找到目标值。
2. 比较当前指针位置的元素 `array[i][j]` 和目标值 `num`。如果 `array[i][j]` 大于 `num`,说明我们要查找的数可能在左下方,因此将 `j` 减一;如果 `array[i][j]` 小于或等于 `num`,说明我们可能在当前范围内找到了目标,将 `i` 减一,同时更新 `flag` 为 `true`。
3. 在遍历过程中,如果 `i` 或 `j` 落出数组范围(即 `i < 0` 或 `j < 0`),说明没有在数组中找到目标值,此时 `flag` 仍然为 `false`,则返回 `flag`。如果 `flag` 为 `true`,表示在数组中找到了目标值,函数返回 `true`。
4. 提供的代码中存在错误,主要在于错误地将 `first` 初始化为右下角的值,实际上应该初始化为 `array[0][0]`。修复后的代码会从左下角开始,逐步向右上方移动,直到找到目标值或者遍历完整个数组。
代码优化建议:
```java
import java.util.Scanner;
public class Solution1 {
public static boolean findNumber(int[][] array, int num) {
// 录入数组信息
Scanner scanner = new Scanner(System.in);
int m = scanner.nextInt();
int n = scanner.nextInt();
int[][] arrayCopy = new int[m][n];
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
arrayCopy[i][j] = array[i][j]; // 创建副本以避免直接修改原数组
}
}
// 记录起步值
int first = arrayCopy[0][0];
// 双指针遍历
int i = 0, j = 0;
while (i < m && j < n) {
if (arrayCopy[i][j] > num) {
j--;
} else if (arrayCopy[i][j] <= num) {
i++;
if (arrayCopy[i][j] == num) {
return true;
}
}
}
return false;
}
public static void main(String[] args) {
// ...其他输入和调用findNumber方法的逻辑...
}
}
```
以上是解决这个问题的关键知识点,希望对你学习二维数组查找算法有所帮助。"
2022-06-12 上传
2023-06-10 上传
2023-02-24 上传
2023-05-30 上传
2023-05-31 上传
2023-05-31 上传
2023-09-04 上传
2023-05-31 上传
2023-06-11 上传
谦谦少女zero.1
- 粉丝: 0
- 资源: 1
最新资源
- 前端面试必问:真实项目经验大揭秘
- 永磁同步电机二阶自抗扰神经网络控制技术与实践
- 基于HAL库的LoRa通讯与SHT30温湿度测量项目
- avaWeb-mast推荐系统开发实战指南
- 慧鱼SolidWorks零件模型库:设计与创新的强大工具
- MATLAB实现稀疏傅里叶变换(SFFT)代码及测试
- ChatGPT联网模式亮相,体验智能压缩技术.zip
- 掌握进程保护的HOOK API技术
- 基于.Net的日用品网站开发:设计、实现与分析
- MyBatis-Spring 1.3.2版本下载指南
- 开源全能媒体播放器:小戴媒体播放器2 5.1-3
- 华为eNSP参考文档:DHCP与VRP操作指南
- SpringMyBatis实现疫苗接种预约系统
- VHDL实现倒车雷达系统源码免费提供
- 掌握软件测评师考试要点:历年真题解析
- 轻松下载微信视频号内容的新工具介绍