题不再难,在于优化

这道题之前做过。

题目是:

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

之前自己做的时间复杂度略高。主要的思路是目标数是target,首先与二维数组的第一行最后一列的数比较,与target比较的数如果大于等于target,根据题目中数组的特性,说明有可能在这一行中,遍历这一行与target比较,如果有,返回true;如果没有在此行中,继续与下一行最后一列的数字比较,继续判断。代码如下:

 1 public static boolean Find(int target, int [][] array) {
 2              //从第一行开始
 3             for(int i=0;i<array.length;i++){
 4                 //从最后一列开始
 5                 int j = array[i].length-1;
 6                 //for(int j = array[i].length-1;j>=0;j--){
 7                     //如果最后一列的数比目标数大,就挨个与这一行的每个数进行比较。
 8                     if(array[i][j] >= target){
 9                         for(int k:array[i]){
10                             if(k==target){
11                                 return true;
12                             }
13                         }
14                     }
15                 //}
16             }
17             return false;
18         }

最坏的情况,查找不到target时,时间复杂度为O(n^2).

书中给出了更为优化的代码,时间复杂度为O(n),如下:

 1 public static boolean find0(int target, int [][] array){
 2          boolean Found = false;
 3          int row = 0;
 4          int column = array[0].length-1;
 5
 6          if(array!=null && array.length >0 && array[0].length> 0){
 7
 8             while(row < array.length && column >= 0){
 9                 if(array[row][column] == target){
10                     Found = true;
11                     break;
12                 }else if(array[row][column]>target){
13                     column--;
14                 }else{
15                     row++;
16                 }
17
18             }
19
20          }
21
22          return Found;
23      }

主要是用了排除多余的行与列,缩小范围的方法。

根据给出数组的特性,首先选取数组右上角的数字。如果该数字等于要查找的数字,则查找过程结束。如果该数字大于要查找的数字,则去除该数字所在列。如果该数字小于要查找的数字,则去除该数字所在行。这样逐步缩小范围,或者找到要查找的数字,或者查找范围为空。

还是那句话,优化很重要。

转载于:https://www.cnblogs.com/weiziqiang/p/8886563.html

面试题目4:二维数组中的查找相关推荐

  1. 剑指offer:面试题04. 二维数组中的查找

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

  2. [剑指Offer]5.二维数组中的查找

    题目 在一个二维数组中,每一行都依照从左到右递增的顺序排序,每一列都依照从上到下递增的顺序排序.请完毕一个函数,输入这种一个二维数组和一个整数.推断数组中是否含有该整数. 思路 [算法系列之三十三]杨 ...

  3. 剑指Offer面试题:2.二维数组中的查找

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

  4. 二维数组中的查找(杨氏矩阵(C语言+Java))

    二维数组中的查找这道题,出自 <剑指Offer>.也是著名的杨氏矩阵 在一个 n *m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的.输入一个数,判断矩阵中 ...

  5. 算法题001 剑指Offer 面试题三:二维数组中的查找

    剑指Offer题目1:二维数组中的查找 题目描述: http://ac.jobdu.com/problem.php?cid=1039&pid=0 在一个二维数组中,每一行都按照从左到右递增的顺 ...

  6. 面试题4:二维数组中的查找

    /******************************************************************* Copyright(c) 2018, htfeng All r ...

  7. 剑指offer刷题(java)|二维数组中的查找|替换空格|leetcode刷题

    文章目录 前言 一.二维数组中的查找 题目 题解一 题解二 题解三 二.替换空格 题目 题解一 题解二 题解三 前言 本文主要是写了我做算法题的思路以及对其他优秀题解的自我理解. 一.二维数组中的查找 ...

  8. 隔一段时间查找一次 golang_剑指 offer-04 二维数组中的查找

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

  9. 二维数组的空间复杂度_剑指 offer 面试题精选图解 04 . 二维数组中的查找

    点击关注上方"图解面试算法", 设为"置顶或星标",一起刷 LeetCode. 作者:程序员吴师兄 今天分享的题目来源于 LeetCode 上的剑指 Offer ...

  10. 《剑指Offer》——二维数组中的查找(JZ1)C++

    文章目录 前言 题目:JZ1 二维数组中的查找 一.暴力解法 二.优化解法 总结 前言 题目:JZ1 二维数组中的查找 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序, ...

最新文章

  1. Devexpress 10.2.3 Demo 批量生成脚本
  2. linux下nginx与php设置开机启动代码
  3. ASP.NET 图片剪辑控件
  4. 一个web版的计算器
  5. argb可以和rgb同步吗_更冷更静更降温!第三代双腔设计,酷冷至尊海魔240水冷岂止RGB...
  6. TurboMail邮件服务器推动邮件领域的进一步发展
  7. PROE_CONFIG
  8. 小罐茶:左手天堂,右手地狱
  9. PHP、Python 和 Ruby 语言的区别
  10. SQL(08)_SQL约束
  11. 券商Robinhood大量客户被最低价格强平-交易成本拉大500倍,游戏驿站GME只能平仓不能开仓-看看行政总裁Vlad Tenev是如何回复这些问题的?
  12. 【视频学习】VALSE短教程《因果发现与因果性学习》 蔡瑞初教授
  13. AMOS分析技术:独立模型、饱和模型和假设模型
  14. AndroidStudio安装JB系官方中文插件
  15. 用Python画红旗
  16. unity 文件API
  17. 浅析scoped属性原理及深度作用选择器
  18. ldpc译码讲解_LDPC 译码问题
  19. M1版MacBook性价比怎么样?
  20. 逐浪CMS2 X3.5功能预览:微信打赏与在线捐赠功能发布

热门文章

  1. nodejs+html转换pdf,Nodejs中使用phantom将html转为pdf或图片格式的方法.pdf
  2. jQuery 事件
  3. HNCU1101:马的移动---BFS
  4. 腾讯面试:前 K 个高频元素
  5. shell实例第12讲:给定目录找出包含关键字的文件
  6. oleVariant序列化对象
  7. 线程安全: 互斥锁和自旋锁(10种)
  8. iOS Swift GCD 开发教程
  9. VBS脚本常用经典代码收集
  10. 阿里内核月报2015年03月