《剑指offer》面试题3 二维数组中的查找 Java版
(二维数组,每行递增,每列递增。输入二维数组和一个整数,判断数组中是否含有此数。)
我的方法:拿到题目,根据题目条件我提取出这样一个特性:一个数的右边和下面的数都比它大。于是就可以写出一种递归的方法:从左上角开始寻找,针对当前被检查的数字,如果相等返回true;如果小于target我们继续向右和向下寻找;如果大于target就不必继续寻找下去了(因为我们向右或向下寻找只会继续增大)。
public class SearchIn2DArray {
public static boolean find(int[][] a, int target){
// 指针为空 或者 {}或者{{}}
if(a == null || a.length == 0 || (a.length == 1 && a[0].length == 0)){
return false;
}
return search(a, target, 0, 0);
}
private static boolean search(int[][] a, int target, int row, int col){
if(row >= a.length || col >= a[0].length){
return false;
}
if(a[row][col] > target){
return false;
}else if(a[row][col] == target){
return true;
}else return search(a, target, row+1, col) || search(a, target, row, col+1);
}
}
书中方法:解决复杂问题,一个很有效的方法是从一个具体的问题入手,通过分析简单的例子,寻找到普通的规律。书上的思路是从右上角开始,向左或者向下去寻找目标,也是利用了左边的数字比当前数字小,下面的数字比当前数字大这个特点。
public class SearchIn2DArray {
public boolean find2(int[][] a, int target){
if(a == null || a.length == 0 || (a.length == 1 && a[0].length == 0)){
return false;
}
int rowNow = 0;
int colNow = a[0].length-1;
while(rowNow < a.length && colNow >= 0){
if(a[rowNow][colNow] == target){
return true;
}else if(a[rowNow][colNow] > target){
rowNow ++;
}else if(a[rowNow][colNow] < target){
colNow --;
}
}
return false;
}
}
《剑指offer》面试题3 二维数组中的查找 Java版的更多相关文章
- 剑指offer【01】- 二维数组中的查找(Java)
在经历了春招各大公司的笔试题和面试官的血虐之后,决定要刷一些算法题了,不然连面试机会都没有. 而应对笔试和面试,比较出名的就是剑指offer的题目和LeetCode的题目了.剑指offer应对面试中的 ...
- 剑指offer面试题3 二维数组中的查找(c)
剑指offer面试题三:
- 剑指offer面试题3二维数组中的查找
题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 需要与面试官确认的是,这 ...
- 剑指offer面试题4: 二维数组中的查找
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...
- 剑指offer面试题3 二维数组中的查找 (java)
注:java主要可以利用字符串的length方法求出长度解决这个问题带来方便 public class FindNum { public static void main(String[] args) ...
- 剑指Offer - 九度1384 - 二维数组中的查找
剑指Offer - 九度1384 - 二维数组中的查找2013-11-23 23:23 题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个 ...
- 剑指Offer编程题1——二维数组中的查找
剑指Offer编程题1---------------二维数组中的查找 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完 ...
- 【剑指Offer】1、二维数组中的查找
题目描述: 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否 ...
- 剑指offer(3)——二维数组中的查找
题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 思路: 首先选取数组中右上 ...
- 剑指offer学习读书笔记--二维数组中的查找
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都是按照从上到下递增的顺序排序.请设计一个函数,输入这样的一个二维数组和一个整数,判断数组是否含有这个整数. 1 2 8 9 2 4 9 1 ...
随机推荐
- Linux压缩、解压
gzip压缩: 归档,压缩,yourFloder文件夹生成yourName.tar.gz: - tar -zcvf yourName.tar.gz yourFloder 解压yourName.tar. ...
- js中对象的属性名和属性值
代码 /** * 对象的属性名 * - 对象的属性名不强制遵循标识符的命名规范,可以是任意的名字,但在开发中 * 尽量遵循标识符的命名规范 */ // 创建对象obj1 var obj1 = new ...
- python面向对象的三大特征--多态
#什么是多态:由不同的类实例化得到的对象,调用同一个方法,执行的逻辑不同 #多态体现在由一个类实例化出多个对象,这些对象执行相同的方法时,执行的过程和结果不一样--不同的对象调用相同的方法 #多态的概 ...
- 《Android程序设计》课程学习
一.课件内容 2019-2010-1学期课件,点击查看 二.作业相关 上交作业的方法 访问ftp://192.168.42.254:22,登录后找到自己的姓名文件夹,放入作业即可.登录账号为stu2, ...
- alert(1) to win 16
- 阿里云ECS VSFTP上传本地文件
开始终端 购买云服务,获得公网IP,内网IP 控制台首页获得 获得终端连接密码 连接终端,输入连接密码 获得终端界面,进入终端 上传文件 ## .安装VSFTP服务器程序 yum install vs ...
- 使用rabbitctl添加用户
使用rabbitctl添加用户 第一.添加mq用户并设置密码 root@live-mq-01:~ # rabbitmqctl add_user mq 123456 1 root@live-mq-01: ...
- orm 查询数据库随机返回一条数据的解决办法用models.User.objests.all().order_by('?').first()
- php strcspn()函数 语法
php strcspn()函数 语法 作用:输出在字符串中找到某字符之前查找的字符数.直线电机参数 语法:strcspn(string,char,start,length) 参数: 参数 描述 str ...
- Android逆向之旅---基于对so中的section加密技术实现so加固
一.前言 好长时间没有更新文章了,主要还是工作上的事,连续加班一个月,没有时间研究了,只有周末有时间,来看一下,不过我还是延续之前的文章,继续我们的逆向之旅,今天我们要来看一下如何通过对so加密,在介 ...