
"剑指Offer:二维数组中的查找(Java代码)"
下载需积分: 1 | 870KB |
更新于2024-01-18
| 8 浏览量 | 举报
收藏
题目要求编写一个函数,判断一个二维数组中是否包含某个整数。给定的二维数组是有序的,每一行从左到右递增,每一列从上到下递增。函数需要输出一个布尔值,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为二维数组的列数。
建议大家可以尝试在输入描述给定的二维数组和目标整数上进行调试,验证代码的正确性。
相关推荐







福尔摩星儿
- 粉丝: 0
最新资源
- JSP实用案例教程:代码解析与应用实例
- OA系统短信功能:短信发送与接收技术实现
- Gens32_Surreal_v1_86_HD:最新世嘉MD模拟器发布
- Visual Basic 6.0开发的学生信息管理系统原代码
- C#实现Flv文件解析及结构详解
- 探索Android Dalvik虚拟机的开源世界
- SSH框架整合未完成jar包解决方案
- 程序获取SIM卡信息教程
- 华为GSM网络优化技术资料汇总
- 利用Java实现鲁滨逊归结原理的人工智能作业
- 完整网上书店开发项目与毕业论文教程
- delphi开发的病房管理系统毕业设计
- BP神经网络实现高准确率文字识别
- 51单片机基础教程:从绪论到应用实践
- ExtJs框架实现图片批量处理功能
- Excel快速切换工作簿的神器使用指南
- 浙大数据库原理课件深度解析:从概念到SQL实践
- 变速齿轮0.46:革命性的游戏速度调整工具
- 《Sun公司Java实例手册》:深入浅出Java编程精髓
- FPGA新手指南:NIOS软件与硬件工程构建教程
- 深入探讨Visual Basic6.0的高级编程与项目实战
- 实用pdg转pdf转换器软件使用体验
- BP神经网络实用类实现与应用指南
- VS2005环境下C++实现的WinCE6.0串口调试工具