• 剑指offer(一):二维数组中的查找


    说明:

      1.本系列是根据《剑指Offer》这个系列做的一个小笔记。

      2.直接动力是因为师兄师姐找工作很难,而且机械出生的我面试算法更难。

      3.刚开始准备刷LeetCode、LintCode,突然看见一个大神博客,同为研究僧为啥差别那么大呢?

      4.在别人基础之上进行部分优化,总结自己的观点。


    问题:

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

    思路:

      1.普通想法:行列循环,依次寻找。

      2.升级思想:以行和列为单位,以一行或者一列的最大一个数去和目标对比(等于目标直接结束、小于目标向下一行或列的最大值进行对比、大于目标值以此行或者列为目标进行查找),这些循环都是迭代的,当然也可以用循环。

      3.终极思想:以第二个思想为基础,搜索目标改为二分法,这种方法平均效率很高。

      4.~~能力有限欢迎补充!

    C++代码实现:(本文以第二个为例子)

     1 #include<iostream>
     2 using namespace std;
     3 bool FindNum(int* num, int aim);
     4 
     5 int main()
     6 {
     7     cout << "The first code Answer is : ";
     8     int a[5][5] = { {1,2,3,4,5},{2,3,4,5,6 }, {11, 12, 13, 14, 15},{21, 22, 23, 24, 25},{31, 32, 33, 34, 35} };
     9     cout << FindNum(a[0],7) << endl;
    10     while (1);
    11     return 0;
    12 }
    13 
    14 //@num:二维数组
    15 //@aim:目标数
    16 //@存在返回True,不存在返回False
    17 bool FindNum(int* num, int aim)
    18 {
    19     if (num == NULL) return false;
    20     int rows = sizeof(num) / sizeof(num[0]);
    21     int cols = sizeof(num[0]);
    22     for (int i = cols - 1; i >= 0; i--)
    23     {
    24         if (*(num + 0*cols +i) == aim) return true;//相等退出
    25         else if (*(num + 0 * cols + i)>aim) continue;//大于删除列
    26         else//小于查找列
    27         {
    28             for (int j = 0; j<cols; j++)
    29             {
    30                 if (*(num + j * cols + i) == aim) return true;
    31                 else continue;
    32             }
    33             return false;
    34         }
    35     }
    36     return false;
    37 }

    参考:http://cuijiahua.com/,直接跟着这位大神博客刷题的,部分思路参考大神。

  • 相关阅读:
    排球计分的完善
    排球计分(总结)
    排球计分(八)用户注册、验证
    排球计分(七)看一下运行结果
    排球计分(六)view的实现
    排球计分(五)Controller的实现
    排球计分(四)Model的实现
    排球计分(三)架构概要设计
    排球计分(二)需求分析和数据库设计
    排球计分程序重构(六)
  • 原文地址:https://www.cnblogs.com/wjy-lulu/p/8064310.html
Copyright © 2020-2023  润新知