美文网首页
n*n的数字矩阵上下、左右均递增,查找数字k

n*n的数字矩阵上下、左右均递增,查找数字k

作者: TsuiJin | 来源:发表于2016-10-13 20:01 被阅读331次

    给定如下的n*n的数字矩阵,每行从左到右是严格递增, 每列的数据也是严格递增
    1 2 3
    3 5 6
    4 8 9
    现在要求设计一个算法, 给定一个数k 判断出k是否在这个矩阵中。

    算法设计:

    首先检查左下角,如果这个数小于k,就说明这一列都小于k,接下来扫描右边一列。
    如果这个数大于k,就说明这一行都大于k,接下来扫描上面一行。

    时间复杂度为O(n+m-1)

    public class JuzhenN {
        public static void main(String[] args){
            int[][] data = {
                    {1, 2, 3, 4, 5},
                    {2, 3, 5, 6, 7},
                    {6, 8, 9,10,11},
                    {7, 9,10,12,13},
                    {8,10,11,15,14}
            };
            
            int k = 13;
            searchK(data, k);
        }
    
        private static void searchK(int[][] data, int k) {
            int m = data.length;
            int n = data[0].length;
            for(int i = m - 1, j = 0; i >= 0 && j < n; ){
                if(data[i][j] == k){
                    System.out.println(true);
                    return;
                }else if(data[i][j] < k){
                    j++;
                }else{
                    i--;
                }
            }
            System.out.println(false);
        }
    }

    相关文章

      网友评论

          本文标题:n*n的数字矩阵上下、左右均递增,查找数字k

          本文链接:https://www.haomeiwen.com/subject/triwyttx.html