二维数组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:搜索二维矩阵的主要内容,如果未能解决你的问题,请参考以下文章