博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode 74. Search a 2D Matrix(搜索二维矩阵)
阅读量:5143 次
发布时间:2019-06-13

本文共 2081 字,大约阅读时间需要 6 分钟。

Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:

 

  • Integers in each row are sorted from left to right.
  • The first integer of each row is greater than the last integer of the previous row.

 

For example,

Consider the following matrix:

[  [1,   3,  5,  7],  [10, 11, 16, 20],  [23, 30, 34, 50]]

Given target = 3, return true.

 


题目标签:Array

  题目给了我们一个有序的矩阵,让我们找target是否在矩阵中。首先我们分析,如果我们知道了target 在哪一行的话,直接用binary search 就可以了。所以第一步可以用binary search 来搜索第一列,确认target在哪一行。在用一次二分法对于那一行,找出target。

 

 

 

Java Solution:

Runtime beats 71.85% 

完成日期:07/23/2017

关键词:Array

关键点:用二分法两次

 

 

1 public class Solution  2 { 3     public boolean searchMatrix(int[][] matrix, int target)  4     { 5         if(matrix.length == 0 || matrix[0].length == 0) 6             return false; 7         if(target < matrix[0][0] || target > matrix[matrix.length-1][matrix[0].length-1]) 8             return false; 9         // first determine which row the target is in10         int top = 0;11         int bottom = matrix.length-1;12         13         while(top <= bottom)14         {15             int mid = top + (bottom - top) / 2;16             17             if(matrix[mid][0] == target)18                 return true;19             else if(matrix[mid][0] > target)20                 bottom = mid - 1;21             else22                 top = mid + 1;23         }24         25         int rowNum = bottom;26         27         // use binary search for this row28         int left = 0;29         int right = matrix[0].length-1;30         31         while(left <= right)32         {33             int mid = left + (right - left) / 2;34             35             if(matrix[rowNum][mid] == target)36                 return true;37             else if(matrix[rowNum][mid] < target)38                 left = mid + 1;39             else40                 right = mid - 1;41             42         }43     44         return false;45     }46 }

参考资料:

http://www.cnblogs.com/grandyang/p/4323301.html

 

LeetCode 算法题目列表 - 

 

转载于:https://www.cnblogs.com/jimmycheng/p/7227237.html

你可能感兴趣的文章
mysql_对于DQL 的简单举例
查看>>
postgis几何操作函数集
查看>>
js用blob处理ajax请求的流文件
查看>>
ACM题目————还是畅通工程
查看>>
CentOS7使用firewalld打开关闭防火墙与端口
查看>>
35. Search Insert Position(C++)
查看>>
ubuntu 卡在登陆界面无法进入桌面,但是可以进入命令行界面
查看>>
python_day1
查看>>
【转】vim中多标签和多窗口的使用
查看>>
[毕业生的商业软件开发之路]C#异常处理
查看>>
chrome 禁止自动更新
查看>>
一些php文件函数
查看>>
std::min error C2059: 语法错误:“::” 的解决方法
查看>>
Opencv保存摄像头视频&&各种编码器下视频文件占用空间对比
查看>>
「图形学」直线扫描——Bresenham算法改进了中点Bresenham算法?
查看>>
jQuery 给div绑定单击事件
查看>>
Exceptionless 生产部署笔记
查看>>
有关快速幂取模
查看>>
转 ObjExporter Unity3d导出场景地图寻路
查看>>
Linux运维必备工具
查看>>