[编程题] lc: 面试题 10.09. 排序矩阵查找
时间:2020.07.23
题目描述
给定M×N矩阵,每一行、每一列都按升序排列,请编写代码找出某元素。
输入输出案例
思路
从矩阵的右上角的元素开始找,右上角的元素与target比较:
- 如果右上角的元素和target相等,返回true
- 如果右上角元素大于target,把列col-1
- 如果右上角元素小于target,把行row+1
Java代码
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
//极端情况
if(matrix==null) return false;
if(matrix.length==0 || matrix[0].length==0) return false;
//初始从右上角,这里记录右上角的左边为[row][col]
int row =0;
int col = matrix[0].length-1;
while(row<matrix.length && col>=0){
if(target==matrix[row][col]){
return true;
}else if(target<matrix[row][col]){
col--;
}else{
row++;
}
}
//执行到此,就是未找到
return false;
}
}
如果是我们返回找到的元素下标
![image-20200723225152108]([编程题] lc [面试题 1009 排序(杨氏)矩阵查找.assets/image-20200723225152108.png)
import java.util.*;
public class Finder {
public int[] findElement(int[][] matrix, int n, int m, int target) {
// write code here
//极端情况
if(matrix==null) return new int[]{-1,-1};
if(matrix.length==0 || matrix[0].length==0) return new int[]{-1,-1};
//初始从右上角,这里记录右上角的左边为[row][col]
int row =0;
int col = m-1;
while(row<n && col>=0){
if(target==matrix[row][col]){
return new int[]{row,col};
}else if(target<matrix[row][col]){
col--;
}else{
row++;
}
}
//执行到此,就是未找到
return new int[]{-1,-1};
}
}