二维数组中的查找

 

题目描述

解题思路

代码实现:


题目描述

在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

Consider the following matrix:

[

  [1,   4,  7, 11, 15],

  [2,   5,  8, 12, 19],

  [3,   6,  9, 16, 22],

  [10, 13, 14, 17, 24],

  [18, 21, 23, 26, 30]

]

Given target = 5, return true.

Given target = 20, return false.

解题思路

从右上角开始查找。矩阵中的一个数,它左边的数都比它小,下边的数都比它大。因此,从右上角开始查找,就可以根据 target 和当前元素的大小关系来缩小查找区间。

复杂度:O(M + N) + O(1)

当前元素的查找区间为左下角的所有元素,例如元素 12 的查找区间如下:

                                                   剑指offer(二) 二维数组中的查找 -Java

代码实现:

public class Solution {
    public boolean Find(int target, int [][] array) {
        int row = array.length-1, column = array[0].length-1;
        for(int i= 0, j= column; i<=row && j>=0;){    判断条件要格外注意 一个是0一个是 r行数-1
            if(array[i][j] == target)
                return true;
            else if(array[i][j]>target)             
                j--;
            else
                i++;        
        }
        return false;

    }
}

 

参考资料:

https://github.com/CyC2018/CS-Notes/blob/master/docs/notes/%E5%89%91%E6%8C%87%20offer%20%E9%A2%98%E8%A7%A3.md

相关文章: