zoukankan      html  css  js  c++  java
  • [算法]在行列都排好序的矩阵中找数

    题目:

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

    例如:

    0   1   2   5

    2   3   4   7

    4   4   4   8

    5   7   7   9

    如果K为7,返回true;如果K为6,返回false。

    要求时间复杂度为O(N+M),额外空间复杂度为O(1)。

    思路:

    1.从矩阵最右上角的数开始寻找(row=0,col=M-1)。

    2.比较当前数matrix[row][col]与K的关系:

    • 如果与K相等,说明已经找到,直接但会true。
    • 如果比K大,因为矩阵每一列都已经排好序,所以在当前数所在的列中,处于当前数下方的数都会比K大,则没有必要继续在第col列上寻找,令col--,重复步骤2。
    • 如果比K小,因为矩阵每一行都已经排好序,所以在当前数所在的行中,处于当前数左方的数都会比K大,则没有必要继续在第row行上寻找,令row++,重复步骤2。

    3.如果找到越界都没有发现与K相等的数,则返回false。

    public static boolean isContains(int[][] matrix, int K) {
            int row = 0;
            int col = matrix[0].length - 1;
            while (row < matrix.length && col > -1) {
                if (matrix[row][col] == K) {
                    return true;
                } else if (matrix[row][col] > K) {
                    col--;
                } else {
                    row++;
                }
            }
            return false;
        }
  • 相关阅读:
    实验0 了解和熟悉操作系统
    学习进度条
    0302软件构建与教学
    评论任务
    学习进度条
    sprint3个人总结
    软件工程学期总结
    6.3 学术诚信与职业道德
    阅读《构建之法》第8、9、10章
    nodejs学习心得
  • 原文地址:https://www.cnblogs.com/xiaomoxian/p/5187200.html
Copyright © 2011-2022 走看看