1. // 面试题4:二维数组中的查找
  2. // 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按
  3. // 照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个
  4. // 整数,判断数组中是否含有该整数。
  5.  
  6. #include <cstdio>
  7.  
  8. bool Find(int* matrix, int rows, int columns, int number)
  9. {
  10. bool found = false;
  11.  
  12. if(matrix != nullptr && rows > && columns > )
  13. {
  14. int row = ;
  15. int column = columns - ;
  16. while(row < rows && column >=)
  17. {
  18. if(matrix[row * columns + column] == number)
  19. {
  20. found = true;
  21. break;
  22. }
  23. else if(matrix[row * columns + column] > number)
  24. -- column;
  25. else
  26. ++ row;
  27. }
  28. }
  29.  
  30. return found;
  31. }
  32.  
  33. // ====================测试代码====================
  34. void Test(char* testName, int* matrix, int rows, int columns, int number, bool expected)
  35. {
  36. if(testName != nullptr)
  37. printf("%s begins: ", testName);
  38.  
  39. bool result = Find(matrix, rows, columns, number);
  40. if(result == expected)
  41. printf("Passed.\n");
  42. else
  43. printf("Failed.\n");
  44. }
  45.  
  46. // 1 2 8 9
  47. // 2 4 9 12
  48. // 4 7 10 13
  49. // 6 8 11 15
  50. // 要查找的数在数组中
  51. void Test1()
  52. {
  53. int matrix[][] = {{, , , }, {, , , }, {, , , }, {, , , }};
  54. Test("Test1", (int*)matrix, , , , true);
  55. }
  56.  
  57. // 1 2 8 9
  58. // 2 4 9 12
  59. // 4 7 10 13
  60. // 6 8 11 15
  61. // 要查找的数不在数组中
  62. void Test2()
  63. {
  64. int matrix[][] = {{, , , }, {, , , }, {, , , }, {, , , }};
  65. Test("Test2", (int*)matrix, , , , false);
  66. }
  67.  
  68. // 1 2 8 9
  69. // 2 4 9 12
  70. // 4 7 10 13
  71. // 6 8 11 15
  72. // 要查找的数是数组中最小的数字
  73. void Test3()
  74. {
  75. int matrix[][] = {{, , , }, {, , , }, {, , , }, {, , , }};
  76. Test("Test3", (int*)matrix, , , , true);
  77. }
  78.  
  79. // 1 2 8 9
  80. // 2 4 9 12
  81. // 4 7 10 13
  82. // 6 8 11 15
  83. // 要查找的数是数组中最大的数字
  84. void Test4()
  85. {
  86. int matrix[][] = {{, , , }, {, , , }, {, , , }, {, , , }};
  87. Test("Test4", (int*)matrix, , , , true);
  88. }
  89.  
  90. // 1 2 8 9
  91. // 2 4 9 12
  92. // 4 7 10 13
  93. // 6 8 11 15
  94. // 要查找的数比数组中最小的数字还小
  95. void Test5()
  96. {
  97. int matrix[][] = {{, , , }, {, , , }, {, , , }, {, , , }};
  98. Test("Test5", (int*)matrix, , , , false);
  99. }
  100.  
  101. // 1 2 8 9
  102. // 2 4 9 12
  103. // 4 7 10 13
  104. // 6 8 11 15
  105. // 要查找的数比数组中最大的数字还大
  106. void Test6()
  107. {
  108. int matrix[][] = {{, , , }, {, , , }, {, , , }, {, , , }};
  109. Test("Test6", (int*)matrix, , , , false);
  110. }
  111.  
  112. // 鲁棒性测试,输入空指针
  113. void Test7()
  114. {
  115. Test("Test7", nullptr, , , , false);
  116. }
  117.  
  118. int main(int argc, char* argv[])
  119. {
  120. Test1();
  121. Test2();
  122. Test3();
  123. Test4();
  124. Test5();
  125. Test6();
  126. Test7();
  127.  
  128. return ;
  129. }

剑指offer——面试题4:二维数组中的查找的更多相关文章

  1. 剑指offer面试题3 二维数组中的查找(c)

    剑指offer面试题三:

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

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

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

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

  4. 剑指offer面试题3 二维数组中的查找 (java)

    注:java主要可以利用字符串的length方法求出长度解决这个问题带来方便 public class FindNum { public static void main(String[] args) ...

  5. 剑指Offer - 九度1384 - 二维数组中的查找

    剑指Offer - 九度1384 - 二维数组中的查找2013-11-23 23:23 题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个 ...

  6. 剑指offer【01】- 二维数组中的查找(Java)

    在经历了春招各大公司的笔试题和面试官的血虐之后,决定要刷一些算法题了,不然连面试机会都没有. 而应对笔试和面试,比较出名的就是剑指offer的题目和LeetCode的题目了.剑指offer应对面试中的 ...

  7. 剑指offer第二版-4.二维数组中的查找

    面试题4:二维数组中的查找 题目要求: 一个二维数组中,每一行从左到右递增,每一列从上到下递增.输入一个整数,判断数组中是否含有该整数 /** * @since 2019年2月13日 下午5:08:5 ...

  8. 剑指Offer编程题1——二维数组中的查找

    剑指Offer编程题1---------------二维数组中的查找 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完 ...

  9. 【剑指Offer】1、二维数组中的查找

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

  10. 剑指offer(3)——二维数组中的查找

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

随机推荐

  1. eclipse——Maven创建JavaWeb工程

    打包方式改为war 问题:webapp目录下缺少web.xml文件 先勾选掉Dynamic Web Services 点击Applay 再勾选上Dynamic Web Services ,目的是为了产 ...

  2. hdu1269 Tarjan强连通分量 模板(转)

    #include<stdio.h> #include<iostream> #include<vector> using namespace std; ; vecto ...

  3. HTTP文件上传插件开发文档-JSP

    版权所有 2009-2016 荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webplug/http-u ...

  4. 【Java学习01】:win7环境安装JDK

    最近开始学习java,从第一步做起吧.win7中安装jdk非常简单,大牛勿喷. 1.下载JDK并执行安装. 访问网站www.java.com,选择win7版本的JDK下载.下载后双击安装(比较慢,耐心 ...

  5. ABP源码uml类图

    陆陆续续学习ABP框架有一段时间了,阳光铭睿的入门教程和HK Zhang的源码分析文章对我的学习帮助都很大.之所以会花这么大工夫去学习ABP.看ABP的源代码,一是因为本人对于DDD也非常有兴趣,AB ...

  6. <%@ include > 与< jsp:include >

    include指令表示在JSP编译时插入一个包含文本或者代码的文件,把文件中的文本静态地包含过去.也就是说,会把被包含的页面拷贝到包含的页面中指令所在的位置. 语法格式:<%@ include ...

  7. Oracle累计函数

    今天遇到一个客户的报表需求,在shipment的报表中要查看该shipment中的每个PO的采购数量,当前shipment的出货数量以及累计的所有出货数量. 要有累计的出货数,并且是要有顺序的累计出货 ...

  8. 多态实现的原理------新标准c++程序设计

    “多态”的关键在于通过基类指针或引用调用一个虚函数时,编译时不确定到底调用的是基类还是派生类的函数,运行时才确定.例子: #include<iostream> using namespac ...

  9. 类的互相包含------新标准c++程序设计

    #include<iostream> using namespace std; class A; class B{ public: void f(A* pt){}; } class A{ ...

  10. [Algorithm]排序

    一.排序算法 1.插入排序 1) 直接插入排序:(插入类) 1 void InsertSort( ElemType R[], int n ) 2 { 3 for ( int i = 2; i < ...