首页 > 编程语言 > 详细

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

时间:2020-07-24 00:31:34      阅读:82      评论:0      收藏:0      [点我收藏+]

[编程题] 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};
    }
    
}

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

原文:https://www.cnblogs.com/jiyongjia/p/13369387.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!