建设银行网站的目的是什么,中国菲律宾铁路项目,大同百度做网站多少钱,面试网站建设工程师题目详情#xff1a;
给你一个满足下述两条属性的 m x n 整数矩阵#xff1a;
每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。
给你一个整数 target #xff0c;如果 target 在矩阵中#xff0c;返回 true #xff1b;否则
给你一个满足下述两条属性的 m x n 整数矩阵
每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。
给你一个整数 target 如果 target 在矩阵中返回 true 否则返回 false 。 示例 1 输入matrix [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target 3
输出true示例 2 输入matrix [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target 13
输出false提示
m matrix.lengthn matrix[i].length1 m, n 100-104 matrix[i][j], target 104
代码实现
class Solution { public boolean searchMatrix(int[][] mat, int t) { // 获取矩阵的行数和列数 int m mat.length, n mat[0].length; // 第一次二分查找定位到目标值可能所在的行 // 初始化左右指针 int l 0, r m - 1; while (l r) { // 找到中间行 int mid l r 1 1; // 如果中间行的第一个元素小于等于目标值t说明目标值可能在中间行或更下面的行 if (mat[mid][0] t) { l mid; } else { // 否则目标值只可能在中间行上面的行 r mid - 1; } } // 最终r指向的行是目标值可能所在的行 int row r; // 如果该行第一个元素就是目标值直接返回true if (mat[row][0] t) return true; // 如果该行第一个元素大于目标值说明目标值不在矩阵中返回false if (mat[row][0] t) return false; // 第二次二分查找在目标值可能所在的行中定位到目标值可能所在的列 // 初始化左右指针 l 0; r n - 1; while (l r) { // 找到中间列 int mid l r 1 1; // 如果中间列的元素小于等于目标值t说明目标值可能在中间列或更右边的列 if (mat[row][mid] t) { l mid; } else { // 否则目标值只可能在中间列左边的列 r mid - 1; } } // 最终r指向的列是目标值可能所在的列 int col r; // 检查该列的元素是否等于目标值t return mat[row][col] t; }
}