二维数组3:搜索二维矩阵

Posted 纵横千里,捭阖四方

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二维数组3:搜索二维矩阵相关的知识,希望对你有一定的参考价值。

​leetcode74搜索二维矩阵,也是一个出现频率特别高的题目。

已知int一个有序矩阵mat,同时给定矩阵的大小n和m以及需要查找的元素x,且矩阵的行和列都是从小到大有序的。设计查找算法返回所查找元素的二元数组,代表该元素的行号和列号(均从零开始)。保证元素互异。还是先画图看一下情况

比如上面这个图,我们是想找7,从1开始就这样之字形先向右,再向下,一直到找到结果,或者结束。我们发现这里循环有点冗余,能否优化一下呢?我们可以这样子:当前水平元素大了的时候,我们直接向下走,先判断再决定向左还是向右。就是这样子:

这样虽然看上去还行,但是写代码的时候要写很多的判断条件,能否再简化一下呢,可以这样子:

先从右上角开始,只要当前元素比目标值小col–,如果下一个元素的小了,就向下一行代码就是:

public int[] findElement(int[][] mat, int n, int m, int x) {
       // write code here
       int[] res=new int[2];
       int row=0,col=mat[0].length-1;
       while(row<mat.length&& col>=0){
           if(mat[row][col]>x)col--;
           else if(mat[row][col]<x)row++;
           else{
               res[0]=row;
               res[1]=col;
               break;
          }
      }
       return res;
  }

为什么这里到了下面的行,不再需要col++了呢?看上面这个图就发现,线正好是沿着以目标为边界走的,右边的都大,左边的都小,不需要向右了。这样一个二维查找就变成了漂亮的线性查找。

以上是关于二维数组3:搜索二维矩阵的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode-数组搜索二维矩阵 II

代码题(36)— 搜索二维矩阵

LeetCode74. 搜索二维矩阵

28. 搜索二维矩阵

74. 搜索二维矩阵

C代码和python代码:用二维数组实现矩阵的转置