马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
编写一个高效的算法来搜刮 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:
- 每行的元素从左到右升序排列。
- 每列的元素从上到下升序排列。
示例 1:
- <strong>输入:</strong>matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5
- <strong>输出:</strong>true
复制代码 示例 2:
- <strong>输入:</strong>matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 20
- <strong>输出:</strong>false
复制代码
提示:
- m == matrix.length
- n == matrix.length
- 1 <= n, m <= 300
- -109 <= matrix[j] <= 109
- 每行的全部元素从左到右升序排列
- 每列的全部元素从上到下升序排列
- -109 <= target <= 109
- class Solution {
- public boolean searchMatrix(int[][] matrix, int target) {
- //这道题是二维矩阵 ,有特殊的性质
- // 每行的元素从左到右升序排列。
- // 每列的元素从上到下升序排列
- // 首先,可以O(n^2) for循环遍历查询 但是没有利用这个矩阵的性质
- // 首先看矩阵的四个点
- // 左上角 向右变大 向下变大 不可用
- // 左下角 向上变小 向右变大 可用
- //右上角 向下变大 向左变小 可用
- //右下角不可用
- // 左下角 ,右上角可以使用
- // 左下角
- int x=matrix.length-1;
- int y=0;
- while(x>=0 && y<matrix[0].length){
- if(matrix[x][y]==target) return true;
- else{
- //目标值比该值小往上移
- if(matrix[x][y]>target) x--;
- //目标值比该值大往右移
- else y++;
- }
- }
- return false;
- }
- }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |