本文主要是介绍leetcode -- 74. Search a 2D Matrix,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述
题目难度: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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!