题解 | #二维数组中的查找#

二维数组中的查找

http://www.nowcoder.com/practice/abc3fe2ce8e146608e868a70efebf62e

public class Solution {
    public boolean Find(int target, int [][] array) {
      /* 
      首先是条件判断,如果这个二维数组的长度为0,说明数组为空,那么就不用再进行查找操作了。
      直接返回false
      */
        int m = array.length;
        int n = array[0].length;
        if (m == 0 || n == 0) {
            return false;
        } 
      /*
       每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。
       这个特点很重要,本题能使用二分查找的思想就是基于这个特点。
       思路就是二分查找从右上角开始,因为数组严格按照每行每列递增的顺序,
       所以如果当前值大于目标值,我们需要往左边找,所以就是 r =r-1;
           如果当前值小于目标值,我们需要往下找,所以就是 l =l+1;
           如果当前值等于目标值,说明找到了,直接返回true;
        当循环执行完毕后,还没有找到,说明该元素在数组中不存在,我们返回false就行。
      */
        int l =0, r = n - 1;//r为右上角元素
        while (l < m && r >= 0) {
            if (array[l][r] == target) {
                return true;
            } else if (array[l][r] > target) {
                -- r;
            } else {
                ++ l;
            }
        }
        return false;
    }
}
全部评论

相关推荐

10-09 22:05
666 C++
找到工作就狠狠玩CSGO:报联合国演讲,报电子烟设计与制造
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务