Leetcode 74. Search a 2D Matrix
2016-01-16 12:41
525 查看
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:
Given target =
找到那一行了,再用binary search找哪一列. 时间复杂度还是O(logn)
Java code:
Reference:
1. http://www.jiuzhang.com/solutions/search-a-2d-matrix/
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.
解题思路:
做两次binary search, 先找在哪一行,即比较第一列,last number <= target.找到那一行了,再用binary search找哪一列. 时间复杂度还是O(logn)
Java code:
public class Solution { public boolean searchMatrix(int[][] matrix, int target) { //binary search twice, first use first column to find in which row //then go to the row, find in which column if(matrix == null || matrix.length == 0) { return false; } if(matrix[0] == null || matrix[0].length == 0) { return false; } int row = matrix.length; int column = matrix[0].length; //find the row index, the last number <= target int start = 0; int end = row - 1; while(start + 1 < end) { int mid = start + (end - start) / 2; if(matrix[mid][0] == target) { return true; }else if(matrix[mid][0] < target) { start = mid; }else { end = mid; } } if (matrix[end][0] <= target) { row = end; } else if (matrix[start][0] <= target) { row = start; } else { return false; } //find the column index, the number equal to target start = 0; end = column - 1; while(start + 1 < end) { int mid = start + (end - start) / 2; if(matrix[row][mid] == target) { return true; }else if(matrix[row][mid] < target) { start = mid; }else { end = mid; } } if(matrix[row][start] == target){ return true; }else if (matrix[row][end] == target) { return true; }else { return false; } } }
Reference:
1. http://www.jiuzhang.com/solutions/search-a-2d-matrix/
相关文章推荐
- JVM学习笔记(八)--- 分代垃圾回收详述2
- linux操作系统,tomcat如何开启JMX
- [前端][node]linux环境下nodejs的安装
- shell脚本----for循环-转 Syntax error: Bad for loop variable
- Linux系统管理(二):Linux系统启动流程
- linux下vi或vim编辑文件时提示Found a swap file by the name的原因及解决方法
- 基于Proxy代理服务器的长连接方法
- 在shell中使用echo命令输出带颜色的文本-转
- svn命令
- 有关RAVE报表 - 大富翁论坛20050419
- linux/unix上 printf输出带颜色字体(有意思)-转
- Android中把bitmap存成BMP格式图片的方法
- Ubuntu 12.04下关闭图形界面知识整理-转
- 虚拟机linux上路由器启动问题分析
- 留有后门的IRC源程序,谁看得懂就有黑客潜质
- 图片的拉伸、翻转、不变形,图片转颜色,本地加载
- 留有后门的IRC源程序,谁看得懂就有黑客潜质
- 【转】iOS开发之压缩与解压文件
- VMware下Ubuntu图形界面切换到命令行终端模式
- ubuntu12.04循环登录,无法进桌面的问题。