zoukankan      html  css  js  c++  java
  • 有序二维数组中的查找

    问题描述:

    在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

    示例:

    array=

    {

     {1,2,8,9},

     {2,4,9,12},

     {4,7,10,13},

     {6,8,11,15}

    }

    target = 7

    输出结果应为true  (array包含target)

    解题思路:

    每次拿右上角的数字和target比较,大于剔除列,小于剔除行。

    重复上述步骤,直到查找成功或出界。

    如上例,target=7与数组右上角元素array[0][3]=9比较,7小于9,故去除array最后一列。

    target=7与余下数组右上角元素array[0][2]=8比较,7小于8,故去除array最后一列

    target=7与余下数组右上角元素array[0][1]=2比较,7大于2,故去除array最上一行

    target=7与余下数组右上角元素array[1][1]=4比较,7大于4,故去除array最上一行 

    target=7与余下数组右上角元素array[2][1]=7比较,7等于7,返回true。

    实现代码:

        public static boolean test (int target, int[][] array) {
    
            int i = 0;
            int j = array[0].length - 1;
    
            while (i<array.length && j>=0) {
                if (target == array[i][j]) return true;
                else if (target < array[i][j]) j--;
                else i++;
            }
    
            return false;
        }

    复杂度:

    O(M+N),M、N分别为数组的行数与列数。

  • 相关阅读:
    公司系统缓慢-分析数据库CPU过高原因-连接数
    克隆虚拟机的相关设置
    centos7基本设置和优化
    遇到的问题和解决集中
    chrome优化调教
    shell三剑客之小弟grep
    迭代器和生成器
    函数进阶
    函数介绍&参数的使用
    文件处理中光标的移动以及文件的修改
  • 原文地址:https://www.cnblogs.com/deltadeblog/p/9265464.html
Copyright © 2011-2022 走看看