剑指OFFER_04_二维数组中的查找_JAVA实现
题目:二维数组中的查找
- 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解题思路
- 将待寻找整数用target表示
- 将一个二维数组画成一个矩形,从右上角元素开始检索。若此时搜索的行数大于总行数,搜索的列数小于=0,返回false。
- 如果此元素>=target,说明右上角元素就是我们要找的整数,返回true。
- 如果此元素>target,说明右上角元素小于我们要找的整数。这个数组的特性是从左到右递增,从上到下递增,所以我们要向下去寻找,所以将待搜索的行数加1,返回第2步。
- 如果此元素>target,说明右上角元素大于我们要找的整数。这个数组的特性是从左到右递增,从上到下递增,所以我们要向左去寻找,所以将待搜索的列数减1,返回第2步。
用例解析
- 假设待搜索数组{
{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}}。如下图,待搜索的target=7。
- 浅蓝色范围为等待搜索的范围。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/a792244684c70a55076640a344f61993.png)
- 从右上角的9开始搜索
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/c1ba840fea055c628456bc82821f0970.png)
- 9>target(7),所以向左缩小范围,列数减1。
- 此时浅蓝色为待搜索范围,8为当前检索元素。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/3418a4a01c43abfffd1270d2ad6ff795.png)
- 8>target(7),所以向左缩小范围,列数减1。
- 此时浅蓝色为待搜索范围,2为当前检索元素。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/d10c2c935fffbcf4cb0e58d4d5a23ada.png)
- 2<target(7),所以向下缩小范围,行数+1。
- 此时浅蓝色为待搜索范围,4为当前检索元素。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/02d384eb9c1c145f731d0b503f9637d4.png)
- 4<target(7),所以向下缩小范围,行数+1。
- 此时浅蓝色为待搜索范围,7为当前检索元素。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/b19f5fcbadddc4f0a8bd99056183c53c.png)
- 7=target,所以返回true。
代码
函数主体部分代码
package q04;
public class Solution {
public boolean findNumberIn2DArray(int[][] matrix, int target)
{
if(matrix == null)
<