题目
给定一个有N*M的整型矩阵matrix和一个整数K,matrix的每一行和每一列都是排好序的。
实现一个函数,判断K是否在matrix中。
思路
由于行和列都是排好序的,我们可以从矩阵的左下角或者右上角开始检查,有的兄弟萌可能就会问了为什么不能从左上角和右下角开始。我们先看下左上角和右下角的情况。
右上角是第一行中最大的值,也是该列中最小的值,
我们把当前的值叫做current,若K大于current,则current左边的所有值都可以排除掉,current的位置向下移动一位,若K小于current,则current下面的所有值都可以排除掉,current的位置也随之向左移动。直到找到K或者越界则方法结束。
左下角也是同理,这里就不作过多的赘述了
这时候我们再回头看一下左上角和右下角的情况,我们没有办法能够一次移动排除多种可能性,只能采用遍历的方式,所以我们选择左下角和右下角。
示例图
下面来看下实际代码。
实现
1 | public static boolean isContains(int[][] matrix, int K) { |