leetcode -- 74. Search a 2D Matrix
程序员文章站
2022-07-14 17:56:27
...
题目描述
题目难度:Medium
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.
- Example 1:
Input:
matrix = [
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
target = 3
Output: true
- Example 2:
Input:
matrix = [
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
target = 13
Output: false
AC代码
这个题目不是很难,但是有一个巧妙的解法,根据题目所给数组的特性,可以把二维数组当成有序的一维数组,然后在其上的查找就可以用binary-search。
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
if(matrix == null || matrix.length == 0) return false;
int row = matrix.length, col = matrix[0].length;
int low = 0, high = row * col - 1;
while(low <= high){
int mid = low + ((high - low) >> 1);//((high - low) >> 1)最外层要加括号,由于优先级的问题,3 + 8 >> 1 其实等于 5.
int midVal = matrix[mid / col][mid % col];
if( midVal == target) return true;
else if(midVal > target) high = mid - 1;
else low = mid + 1;
}
return false;
}
}
推荐阅读
-
LeetCode 74. Search a 2D Matrix
-
74. Search a 2D Matrix
-
74. Search a 2D Matrix
-
LeetCode 74. Search a 2D Matrix
-
[leetcode]74. Search a 2D Matrix
-
leetcode -- 74. Search a 2D Matrix
-
LeetCode 74. Search a 2D Matrix
-
[leetcode] 74. Search a 2D Matrix @ python
-
[leetcode]74. Search a 2D Matrix
-
74. Search a 2D Matrix