Leetcode 之Search a 2D Matrix

来源:互联网 发布:telnet端口23失败win10 编辑:程序博客网 时间:2024/05/24 15:36

题目

https://leetcode.com/problems/search-a-2d-matrix/

题意解析

在二维数组中找一个数,这个二维数组满足2个特性

  • 同一行中的数字右边的比左边的大。
  • 下一行的第一个数比上一行的最后一个数大。

求解

应该找到这样的一个点,使得这样一个点和target数比较的时候如果小于只能是在其左边找,大于则只能在其下方找,想找这样的理由是根据二维数组的特性得到的。


如果是从第一个点开始找现在不能满足情况 ,应该要找的target可能在右边或者下方,同理最后一个数字也不行,继续探讨,根据二维数组的第二个特性,选择从第一行的最后一个数字开始比较,刚好能做到想要的效果。


从第一行的最后一个数字和target比:


如果相等:返回true;
如果大于:在数的左边;
如果小于:在树的下方;
直到最后还没找到target则返回false;


Code

Ac代码

/** * Created by loveqh on 2016/8/12. */public class SearchA2DMatrix {    public boolean searchMatrix(int[][] matrix, int target) {        int m = matrix.length;        int n = matrix[0].length ;        int i = 0;        int j = n - 1;        while (i < m && j >= 0) {            if (matrix[i][j] == target) {                return true;            } else if (matrix[i][j] > target) {                j--;            } else {                i++;            }        }        return false;    }    public static void main(String[] args) {        int[][] matrix={{1,3}};        new SearchA2DMatrix().searchMatrix(matrix,1);    }}
0 0
原创粉丝点击