当前位置: 首页 > news >正文

【JZOF】二维数组中的查找

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

规律:首先先获取数组右上角的数字。如果该数字等于要查找的数字,查找过程结束;

如果该数字大于要查找的数字,剔除这一列,因为该列的所有数字都比它大,向左移动一列,如果该数字小于要查找的数字,剔除这一行,因为该行的所有数字都比它小,向下移动一行。

public class MatrixSearch{


       public static boolean find(int[][] matrix ,int number){
               //考虑程序的鲁棒性,得要处理好可能的输入异常
               if(matrix==null&&matrix.length<1&&matrix[0].length<1){
                      //如果该二维数组没有值
                      return false;
               }
               int rows=matrix.length,cols=matrix.length,row=0,col=cols-1;
               
               while(row<rows&&col>=0){
                    if(matrix[row][col]==number){
                           return true;
                    }else if(matrix[row][col]<number){
                           row++;
                    }else{
                         col--;
                    }
               }
               return false;
        }
}复制代码

案例输入输出检测:

public static void main(String[] args) {        int[][] matrix = {                {1, 2, 8, 9},                {2, 4, 9, 12},                {4, 7, 10, 13},                {6, 8, 11, 15}        };        System.out.println(find(matrix, 7));    // 要查找的数在数组中        System.out.println(find(matrix, 5));    // 要查找的数不在数组中        System.out.println(find(matrix, 1));    // 要查找的数是数组中最小的数字        System.out.println(find(matrix, 15));   // 要查找的数是数组中最大的数字        System.out.println(find(matrix, 0));    // 要查找的数比数组中最小的数字还小        System.out.println(find(matrix, 16));   // 要查找的数比数组中最大的数字还大        System.out.println(find(null, 16));     // 健壮性测试,输入空指针
复制代码

时间复杂度:O(m+n)


相关文章:

  • TypeScript基础入门 - 类 - 抽象类
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • Redis分布式锁的正解实现方式
  • goLang学习笔记(一)
  • jar解压删除压缩
  • zlog使用手册
  • Dagger2基础篇(一)
  • CreatorPrimer|从zIndex开始
  • (day6) 319. 灯泡开关
  • python其他模块安装
  • jQuery普通绑定事件和on委托事件对比
  • 微信小程序实例:分享给一个人还是分享到群的判断代码
  • 线程与进程的区别(基础面试题)
  • C#将控件置于最顶层和最底层
  • 带有去重以及字符串拼接、日期拼接、字段相除的SQL语句
  • JavaScript-如何实现克隆(clone)函数
  • SegmentFault for Android 3.0 发布
  • android图片蒙层
  • ERLANG 网工修炼笔记 ---- UDP
  • JavaScript对象详解
  • JavaScript学习总结——原型
  • Java方法详解
  • PHP 小技巧
  • PHP面试之三:MySQL数据库
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • 闭包--闭包之tab栏切换(四)
  • 从0到1:PostCSS 插件开发最佳实践
  • 给新手的新浪微博 SDK 集成教程【一】
  • 将回调地狱按在地上摩擦的Promise
  • 马上搞懂 GeoJSON
  • 让你的分享飞起来——极光推出社会化分享组件
  • 实现菜单下拉伸展折叠效果demo
  • 译自由幺半群
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • ​520就是要宠粉,你的心头书我买单
  • #预处理和函数的对比以及条件编译
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (五)IO流之ByteArrayInput/OutputStream
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (转)Oracle存储过程编写经验和优化措施
  • (转)大型网站架构演变和知识体系
  • (转载)CentOS查看系统信息|CentOS查看命令
  • .bashrc在哪里,alias妙用
  • .Net 4.0并行库实用性演练
  • .NET Framework杂记
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • @EnableConfigurationProperties注解使用
  • @reference注解_Dubbo配置参考手册之dubbo:reference
  • @RequestMapping处理请求异常
  • [20150629]简单的加密连接.txt
  • [20161214]如何确定dbid.txt
  • [20170713] 无法访问SQL Server