[编程题] lc [面试题 1009 排序(杨氏)矩阵查找

[编程题] lc: 面试题 10.09. 排序矩阵查找

时间:2020.07.23

题目描述

给定M×N矩阵,每一行、每一列都按升序排列,请编写代码找出某元素。

输入输出案例

image-20200723223432947

思路

从矩阵的右上角的元素开始找,右上角的元素与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};
    }
    
}

猜你喜欢

转载自www.cnblogs.com/jiyongjia/p/13369387.html