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

  首先选取数组中右上角的数字。如果该数字等于要查找的数字,查找过程结束;如果该数字大于要查找的数字,剔除这个数字所在的列;如果该数字小于要查找的数字,剔除这个数字所在的行。也就是说,如果要查找的数字不在数组的右上角,则每一次都在数组的查找范围中剔除一行或者一列,这样每一步都可以缩小查找的范围,直到找到要查找的数字,或者查找范围为空。

代码实现:

  1. package com.yyq;
  2.  
  3. /**
  4. * Created by Administrator on 2015/9/4.
  5. */
  6. public class FindInPartiallySortedMatrix {
  7. public static boolean findInMatrix(int matrix[][],int rows,int colums,int number) {
  8. boolean found = false;
  9. if (matrix != null && rows > 0 && colums > 0) {
  10. int row = 0;
  11. int colum = colums - 1;
  12. while (row < rows && colum >= 0) {
  13. if (matrix[row][colum] == number) {
  14. found = true;
  15. break;
  16. } else if (number < matrix[row][colum]) {
  17. colum--;
  18. } else {
  19. row++;
  20. }
  21. }
  22. }
  23. return found;
  24. }
  25. public static void Test(String testName, int matrix[][], int rows, int columns, int number){
  26. if(testName != null){
  27. System.out.println(testName+"=========================");
  28. }
  29. boolean result = findInMatrix(matrix, rows, columns, number);
  30. System.out.println("result = "+result);
  31. }
  32.  
  33. // 要查找的数在数组中
  34. public void Test1(){
  35. int matrix[][] = {{1, 2, 8, 9}, {2, 4, 9, 12}, {4, 7, 10, 13}, {6, 8, 11, 15}};
  36. Test("Test1:要查找的数在数组中", matrix, 4, 4, 7);
  37. }
  38.  
  39. // 要查找的数不在数组中
  40. public void Test2()
  41. {
  42. int matrix[][] = {{1, 2, 8, 9}, {2, 4, 9, 12}, {4, 7, 10, 13}, {6, 8, 11, 15}};
  43. Test("Test2:要查找的数不在数组中", matrix, 4, 4, 5);
  44. }
  45.  
  46. // 要查找的数是数组中最小的数字
  47. void Test3()
  48. {
  49. int matrix[][] = {{1, 2, 8, 9}, {2, 4, 9, 12}, {4, 7, 10, 13}, {6, 8, 11, 15}};
  50. Test("Test3:要查找的数是数组中最小的数字", matrix, 4, 4, 1);
  51. }
  52.  
  53. // 要查找的数是数组中最大的数字
  54. void Test4()
  55. {
  56. int matrix[][] = {{1, 2, 8, 9}, {2, 4, 9, 12}, {4, 7, 10, 13}, {6, 8, 11, 15}};
  57. Test("Test4:要查找的数是数组中最大的数字", matrix, 4, 4, 15);
  58. }
  59.  
  60. // 要查找的数比数组中最小的数字还小
  61. void Test5()
  62. {
  63. int matrix[][] = {{1, 2, 8, 9}, {2, 4, 9, 12}, {4, 7, 10, 13}, {6, 8, 11, 15}};
  64. Test("Test5: 要查找的数比数组中最小的数字还小",matrix, 4, 4, 0);
  65. }
  66.  
  67. // 要查找的数比数组中最大的数字还大
  68. void Test6()
  69. {
  70. int matrix[][] = {{1, 2, 8, 9}, {2, 4, 9, 12}, {4, 7, 10, 13}, {6, 8, 11, 15}};
  71. Test("Test6:要查找的数比数组中最大的数字还大", matrix, 4, 4, 16);
  72. }
  73.  
  74. //传入只有一个数字的数组
  75. void Test7()
  76. {
  77. int matrix[][] = {{1}};
  78. Test("Test7:传入只有一个数字的数组", matrix, 1, 1, 1);
  79. }
  80. // 鲁棒性测试,输入空指针
  81. void Test8()
  82. {
  83. Test("Test8:鲁棒性测试,输入空指针", null, 0, 0, 16);
  84. }
  85.  
  86. public static void main(String[] args){
  87. FindInPartiallySortedMatrix test = new FindInPartiallySortedMatrix();
  88. test.Test1();
  89. test.Test2();
  90. test.Test3();
  91. test.Test4();
  92. test.Test5();
  93. test.Test6();
  94. test.Test7();
  95. test.Test8();
  96. }
  97. }

输出结果:

Test1:要查找的数在数组中=========================

result = true

Test2:要查找的数不在数组中=========================

result = false

Test3:要查找的数是数组中最小的数字=========================

result = true

Test4:要查找的数是数组中最大的数字=========================

result = true

Test5: 要查找的数比数组中最小的数字还小=========================

result = false

Test6:要查找的数比数组中最大的数字还大=========================

result = false

Test7:传入只有一个数字的数组=========================

result = true

Test8:鲁棒性测试,输入空指针=========================

result = false

P38、面试题3:二维数组中的查找的更多相关文章

  1. 【剑指offer】面试题 4. 二维数组中的查找

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

  2. 剑指Offer:面试题3——二维数组中的查找(java实现)

    问题描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路:取数组中的元素与 ...

  3. 剑指offer-面试题3.二维数组中的查找

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

  4. 【剑指Offer学习】【面试题:二维数组中的查找】PHP实现

    最近一直看剑指Offer.里面很多算法题.于是就想着用PHP来显示一下. 题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序. 请完成一个函数,输入这样的 ...

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

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

  6. 剑指offer编程题Java实现——面试题3二维数组中的查找

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

  7. 前端常见算法面试题之 - 二维数组中的查找[JavaScript解法]

    --------------------- 作者:吴潇雄 来源:CSDN 原文:https://blog.csdn.net/weixin_43439741/article/details/835118 ...

  8. 剑指offer面试题3二维数组中的查找

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

  9. 【剑指Offer】面试题04. 二维数组中的查找

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

  10. 《剑指offer》面试题04. 二维数组中的查找

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

随机推荐

  1. Android - 代码片段

    转载说明 本篇文章可能已经更新,最新文章请转:http://www.sollyu.com/android-code-snippets/ 说明 此篇文章为个人日常使用所整理的一此代码片段,此篇文正将会不 ...

  2. 更新Android SDK 访问谷歌等无需代理方法

    最近要做ANDROID,本来是想通过找镜像网址下载,发现公司网络屏蔽了,后来网络上搜索一圈,发现如下方法 1)更改HOST 2)使用代理 使用代理在公司的环境中属于违规操作,因此不能使用 只剩更改HO ...

  3. 如何查看Oracle的用户权限

    ORACLE数据字典视图的种类分别为:USER,ALL 和 DBA. USER_*:有关用户所拥有的对象信息,即用户自己创建的对象信息 ALL_*:有关用户可以访问的对象的信息,即用户自己创建的对象的 ...

  4. (转载)总结一下SQL语句中引号(')、quotedstr()、('')、format()在SQL语句中的用法

    总结一下SQL语句中引号(').quotedstr().('').format()在SQL语句中的用法 总结一下SQL语句中引号(').quotedstr().('').format()在SQL语句中 ...

  5. Oracle “CONNECT BY” 使用

    Oracle “CONNECT BY” 使用 功能说明: 语法结构如下: [ START WITH condition ] CONNECT BY [ NOCYCLE ] condition 说明: 1 ...

  6. ^M的前世今生

    ^M 是ascii中的'\r', 回车符,是16进制的0x0D,8进制的015,十进制的13. 回想计算机发展,旧的打字机使用两个字符来开始一个新行.首先是一个字符命令使打印头移回开始位置(回车),然 ...

  7. Maven使用本地jar包(小私服?支持自动打入war包)

    1.库目录结构 D:\maven-local-repo\cn\xcf007\MD5\1.0\MD5-1.0.jar 2.安装到该本地库 mvn install:install-file -Dfile= ...

  8. 跨过slf4j和logback,直接晋级log4j 2

    今年一直关注log4j 2,但至今还没有出正式版.等不及了,今天正式向大家介绍一下log4j的升级框架,log4j 2. log4j,相信大家都熟悉,至今对java影响最大的logging系统,至今仍 ...

  9. storm sum aggregate 原语 聚合 本地测试

    编写storm程序,对数据进行聚合并且写入到mysql, 本文  主要说明数据中有多个字段需要进行sum或其他操作时的程序写法 1.主程序main方法,storm 拓扑运行入口 public clas ...

  10. POJ1734 - Sightseeing trip

    DescriptionThere is a travel agency in Adelton town on Zanzibar island. It has decided to offer its ...