搜索二维矩阵

题目描述:编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:

  • 每行中的整数从左到右按升序排列。
  • 每行的第一个整数大于前一行的最后一个整数。

示例说明请见LeetCode官网。

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/search-a-2d-matrix/

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解法一:二分查找法

由于matrix数组的行和列都是有序的,所以采用二分查找法是比较高效的方法,具体查找的过程如下:

  • 首先,从matrix数组的左下角开始查找,即初始索引位i为matrix.length - 1,j为0
  • 如果当前位置的值等于target,则直接返回true;
  • 如果当前位置的值小于target,则位置右移,即j加一;
  • 如果当前未知的值大于target,则位置上移,即i减一;
  • 查找结束的条件是i不小于0且j不大于matrix[0].length - 1,即查找的值不能超过matrix数组的界限。

如果查找结束都没有找到和target相等的值,则返回false。

public class LeetCode_074 {
public static boolean searchMatrix(int[][] matrix, int target) {
// 从matrix数组的左下角开始查找
int i = matrix.length - 1, j = 0;
while (i >= 0 && j <= matrix[0].length - 1) {
if (matrix[i][j] == target) {
// 如果当前位置的值等于target,直接返回true
return true;
} else if (matrix[i][j] < target) {
// 如果当前位置的值小于target,右移
j++;
} else if (matrix[i][j] > target) {
// 如果当前未知的值大于target,上移
i--;
}
}
// 如果查找结束都没有找到和target相等的值,则返回false
return false;
} public static void main(String[] args) {
int[][] matrix = new int[][]{{1, 3, 5, 7}, {10, 11, 16, 20}, {23, 30, 34, 60}};
System.out.println(searchMatrix(matrix, 13));
}
}

【每日寄语】 生活中有好的日子和不好的日子,不好的日子就咬着牙撑过去,好的日子就会来的,相信明天会更好!

最新文章

  1. 7 -- Spring的基本用法 -- 5...
  2. ASP.NET MVC中解决日志并发处理log4net
  3. php实战正则表达式:验证手机号
  4. 咋一看DWoo 比 Smarty要好
  5. [转载] 理解RESTful架构
  6. noip赛前小结1
  7. 如何扩展VCL的hint
  8. 李洪强iOS开发之【零基础学习iOS开发】【02-C语言】06-变量与内存
  9. &#39;InitializeCulture&#39; is not a member of &#39;XXXX&#39;
  10. Android小代码&mdash;&mdash;设置全屏
  11. &quot;Invalid username/password or database/scan listener not up&quot;
  12. split添加limit参数
  13. php魔术变量以及命名空间
  14. Android Studio 集成开发工具教学视频
  15. 2017-9-14-Linux移植:加快Linux主机的启动速度
  16. windos server 2008 r2 ftp重启教程
  17. Git安装及创建版本库
  18. selenium+Page Objects(第一话)
  19. Apache Solr 介绍
  20. centos7 设置系统时间与网络同步

热门文章

  1. SpringBoot 简单介绍
  2. Android编译implement、api 和compile区别【转】
  3. 在Android中用纯Java代码布局
  4. Java微信公众号服务器配置-验证Token
  5. CVE-2021-4034 Linux Polkit本地权限提升漏洞
  6. Linux重定向输出到以当前时间命名的文件 / date命令格式化输出
  7. async异步流程控制
  8. 帆软报表(finereport)JS实现点击参数面板按钮显示或隐藏数据
  9. Solution -「CF 1622F」Quadratic Set
  10. 【C# TAP 异步编程】三、async\await的运作机理详解