从化门户网站建设长沙哪家网站建设最好
【力扣】74. 搜索二维矩阵
给你一个满足下述两条属性的 m x n 整数矩阵:
- 每行中的整数从左到右按非递减顺序排列。
 - 每行的第一个整数大于前一行的最后一个整数。
 
给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false 。
示例 1:
| 1 | 3 | 5 | 7 | 
|---|---|---|---|
| 10 | 11 | 16 | 20 | 
| 23 | 30 | 34 | 60 | 
输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3
 输出:true
示例 2:
| 1 | 3 | 5 | 7 | 
|---|---|---|---|
| 10 | 11 | 16 | 20 | 
| 23 | 30 | 34 | 60 | 
输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13
 输出:false
提示:
 m == matrix.length
 n == matrix[i].length
 1 <= m, n <= 100
 - 1 0 4 10^4 104 <= matrix[i][j], target <=  1 0 4 10^4 104
题解
二分法改进,将二维数组映射为一维数组进行二分法
public class Solution {public boolean searchMatrix(int[][] matrix, int target) {if (matrix == null || matrix.length == 0) {return false;}int row = matrix.length;int col = matrix[0].length;int left = 0;int right = row * col - 1;while (left <= right) {int mid = left + (right - left) / 2;// (x,y) --> x*col+y//反过来:一维转二维:matrix[mid/col][mid%col]int element = matrix[mid / col][mid % col];if (element == target) {return true;}else if (element > target) {right = mid - 1;}else {left = mid + 1;}}return false;}
}
