一、题目叙述:
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
.
Subscribe to see which companies asked this question
二、解题思路:
本题很简单,使用二分查找即可,只是比较时需要将mid值转换为数组横纵坐标即可,通过将mid/列数得到横坐标,mid%列数得到纵坐标即可。
三、源码:
public class Solution
{
public boolean searchMatrix(int[][] matrix, int target)
{
int x = matrix.length;
if (x == 0) return false;
int y = matrix[0].length;
//int length = x * y;
int lo = 0;
int hi = x * y - 1;
while (lo <= hi)
{
int mid = lo + (hi - lo) / 2;
if (matrix[mid / y][mid % y] < target) lo = mid + 1;
else if (matrix[mid / y][mid % y] > target) hi = mid - 1;
else return true;
}
return false;
}
public static void main(String args[])
{
int[][] matrix = {};
Solution solution = new Solution();
System.out.println(solution.searchMatrix(matrix, 9));
}
}