"剑指Offer:二维数组中的查找(Java代码)"
需积分: 1 23 浏览量
更新于2024-01-18
收藏 870KB PDF 举报
题目要求编写一个函数,判断一个二维数组中是否包含某个整数。给定的二维数组是有序的,每一行从左到右递增,每一列从上到下递增。函数需要输出一个布尔值,true表示找到了目标整数,false表示没有找到。
首先我们可以观察到,从右上角开始查找是一个不错的策略。因为右上角的数是当前行的最大值,同时也是当前列的最小值。根据二维数组的有序性质,我们可以根据目标整数与右上角的数的大小比较,来决定下一步搜索的方向。
具体的算法可以如下:
1. 如果二维数组的行数或列数为0,那么直接返回false。
2. 初始化两个指针i和j,分别指向二维数组的右上角。
3. 进入一个循环,循环的条件是i小于二维数组的行数且j大于等于0:
a. 如果目标整数与二维数组的右上角数相等,那么直接返回true,表示找到了目标整数。
b. 如果目标整数小于二维数组的右上角数,那么目标整数必然在当前数的左边列,所以j减小1。
c. 如果目标整数大于二维数组的右上角数,那么目标整数必然在当前数的下边行,所以i增加1。
4. 如果循环结束,还没有找到目标整数,那么返回false,表示未找到。
下面是使用Java语言实现的代码:
```
class Solution {
public boolean find(int[][] array, int target) {
int row = array.length;
if (row == 0) {
return false;
}
int col = array[0].length;
if (col == 0) {
return false;
}
int i = 0, j = col - 1; // 从右上角开始
while (i < row && j >= 0) {
if (target == array[i][j]) {
return true;
} else if (target < array[i][j]) {
j--;
} else {
i++;
}
}
return false; // 未找到目标整数
}
}
```
这样,我们就实现了一个函数,可以判断一个二维数组中是否包含某个整数。我们通过从右上角开始查找,不断根据比较结果调整搜索方向,可以在时间复杂度为O(m+n)的情况下找到目标整数。其中m为二维数组的行数,n为二维数组的列数。
建议大家可以尝试在输入描述给定的二维数组和目标整数上进行调试,验证代码的正确性。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2022-09-24 上传
2019-01-18 上传
2018-06-16 上传
2018-10-12 上传
2016-11-23 上传
2020-03-03 上传
福尔摩星儿
- 粉丝: 0
- 资源: 229
最新资源
- 全国江河水系图层shp文件包下载
- 点云二值化测试数据集的详细解读
- JDiskCat:跨平台开源磁盘目录工具
- 加密FS模块:实现动态文件加密的Node.js包
- 宠物小精灵记忆配对游戏:强化你的命名记忆
- React入门教程:创建React应用与脚本使用指南
- Linux和Unix文件标记解决方案:贝岭的matlab代码
- Unity射击游戏UI套件:支持C#与多种屏幕布局
- MapboxGL Draw自定义模式:高效切割多边形方法
- C语言课程设计:计算机程序编辑语言的应用与优势
- 吴恩达课程手写实现Python优化器和网络模型
- PFT_2019项目:ft_printf测试器的新版测试规范
- MySQL数据库备份Shell脚本使用指南
- Ohbug扩展实现屏幕录像功能
- Ember CLI 插件:ember-cli-i18n-lazy-lookup 实现高效国际化
- Wireshark网络调试工具:中文支持的网口发包与分析