题目描述:
编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:
每行中的整数从左到右按升序排列。
每行的第一个整数大于前一行的最后一个整数。
- 示例 1:
输入:
matrix = [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50] ]
target = 3
输出:
true
- 示例 2:
输入:
matrix = [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50] ]
target = 13
输出:
false
思路:
太简单了,裸的二分。
裸的二分,根据题目中矩阵的特点,完全可以将矩阵看成一个数组,注意转化关系
代码:
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
if (matrix.length == 0 || matrix[0].length == 0) {
return false;
}
int rows = matrix.length;
int colums = matrix[0].length;
int left = 0, right = rows * colums - 1;
int mid;
while (left <= right) {
mid = left + (right - left) / 2;
int temp = matrix[mid / colums][mid % colums];
if (temp == target) {
return true;
} else if (temp > target) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return false;
}
}