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

二维数组中的查找

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

由于矩阵的递增递减特性决定了高效的查找的起点和剪枝是解题关键。

要选择那种是所在行/列的最大的,同时是所在列/行最小的点开始查找,这样的点,当查找的目标值比它小时,能够排除一整列/行,当目标值比它大时,同样能排除一行/列,从而提升查找的效率。

public class Solution {
    public boolean Find(int k, int [][] a) {
        if (a == null || a.length == 0 || a[0].length == 0)  // 非法的矩阵: null, {}, {{}, {}, {}}等
            return false;
        int m = a.length, n = a[0].length, i = 0, j = n - 1; // m行n列,从右上角开始
        while (i <= m - 1 && j >= 0) {
            if (a[i][j] == k) return true;
            else if (a[i][j] < k) i++;
            else j--;
        }
        return false;
    }
}
全部评论

相关推荐

想进开水团喝开水:哦 给我一个 就算你真拿到牛友也会为你开心的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务