《剑指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 ...
随机推荐
- CentOS7修改为国内yum源
备份源yum源 如果是国内下载的CentOS很可能国内YUM源已经设置好了. 备份/etc/yum.repos.d/下的*.repo文件. 在CentOS中配置使用网易和阿里的开源镜像 wget ht ...
- 树莓派 msmtp和mutt 的安装和配置
1,安装mutt sudo apt-get install mutt 2,安装msmtp sudo apt-get install msmtp 3,设置mutt /etc/Muttrc # 系统全局设 ...
- vsftp 主动模式安装
server:192.168.109.137 client:192.168.109.138 ------------------------------------------------------ ...
- python中常用的时间操作
python中常用的时间模块有time和datetime,以下是这两个模块中常用的方法: #先引入模块 import timefrom datetime import datetiem, timezo ...
- 利用sql语句建立全国省市区三级数据库
一.创建数据库zone CREATE DATABASE IF ONT EXISTS zone; 二.建立省级表并增加数据 DROP TABLE IF EXISTS `provinces`; CREAT ...
- 【LeetCode】数学(共106题)
[2]Add Two Numbers (2018年12月23日,review) 链表的高精度加法. 题解:链表专题:https://www.cnblogs.com/zhangwanying/p/979 ...
- sed \s
export m1=`free|cut -d ":" -f2|sed -e "s/^\s\s*//g"|head -2|tail -1|cut -d ' ' - ...
- 19.go语言基础学习(下)——2019年12月16日
2019年12月16日16:57:04 5.接口 2019年11月01日15:56:09 5.1 duck typing 1. 2. 接口 3.介绍 Go 语言的接口设计是非侵入式的,接口编写者无须知 ...
- 项目中dubbo的标准配置
# Spring boot applicationspring: application: name: hello-dubbo-service-user-provider # UserService ...
- leetcode_1292. Maximum Side Length of a Square with Sum Less than or Equal to Threshold_[二维前缀和]
题目链接 Given a m x n matrix mat and an integer threshold. Return the maximum side-length of a square w ...