给定一个有N*M的整形矩阵matrix和一个整数k,matrix的每一行和每一列都是排好序的。实现一个函数,判断k是否在matrix中。

题目描述

给定一个有N*M的整形矩阵matrix和一个整数k,matrix的每一行和每一列都是排好序的。实现一个函数,判断k是否在matrix中。
要求时间复杂度o(M+N)空间复杂度o(1)
例如:

 0 1 2 5
 2 3 4 7
 4 4 4 8
 5 7 7 9

如果k为7则返回true;如果k为6则返回false

实现思路

定义右上角的元素坐标为(l,r) 因为该矩阵每一行每一列都有序,所以我们判断经过
具体解释如下:
0 1 2 5
2 3 4 7
4 4 4 8
5 7 7 9
当前(l,r)定位到矩阵右上角的5,判断5和输入值进行比较 5>4 所以根据有序
判断2<4 所以2下面这一列可能会有输入值,我们令l++,依次比较2下面的元素和
继续上述操作知道超出边界(l>matrix.length||r<0)
都没找到返回false

代码

public class code_03 {

    public static void main(String[] args) {
        int[][] matrix = {{0, 1, 2, 5}, {2, 3, 4, 7}, {4, 4, 4, 8}, {5, 7, 7, 9}};
        System.out.println("不存在" + IsEmerge(matrix, -1));
        System.out.println("存在" + IsEmerge(matrix, 5));
    }

    public static boolean IsEmerge(int[][] matrix, int k) {
        int l, r;
        //定义右上角的点坐标(l,r)
        l = 0;
        r = matrix[0].length - 1;
        while (l < matrix.length && r >= 0) {
            if (matrix[l][r] > k) {
                r--;
            } else if (matrix[l][r] < k) {
                l++;
            } else if (matrix[l][r] == k) {
                return true;
            }
        }
        return false;
    }
}


猜你喜欢

转载自blog.csdn.net/qq_35416214/article/details/106822526