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


    主题:二维数组中的查找

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

    思路分析:首先分析题目描述,二维数组行递增,列递增,这种特性不同于混乱无序的数组查找,因此排除在数组中逐个查找目标元素的做法。

                      1   2   8     9

                      2   4   9    12

                      4   7   10  13

                      6   8   11  15

                      考虑从左上角开始查找,这个元素是整个数组中最小的元素。那么如果待查找元素比第一个元素大,那么,是该继续在该行查找还是换行查找是不确定的,

               因此从左上角开始查找的做法排除。从右下角开始查找也同理排除。

                      1   2   8     9

                      2   4   9    12

                      4   7   10  13

                      6   8   11  15

                      考虑从右上角元素开始查找,当目标元素比当前元素小时,我们就可以根据数组每列的递增特性将此列排除,即列数往左移动(col-1);当目标元素大于当前

              元素时,根据每行递增的特性可以将当前行排除,即查找下一行(row+1),当前元素等于待查找元素时,表示查找到目标元素,直接返回。因为是判断当前数组中

             知否含有目标元素而不需要统计个数,因此不需要考虑存在多个目标元素的情况。从右下角查找同理。

    要点选好开始比较的位置(左下角或右上角),每次比较可以排除一行或一列,缩短查找的时间。

    代码实现:

     1 class Solution {
     2 public:
     3     bool Find(int target, vector<vector<int> > array) {
     4         if (!array.empty())
     5         {
     6             int row = array.size();//行数
     7             int col = array[0].size();//列数
     8             //从左上角开始查找
     9             for (int i = 0,j = col-1; i < row && j >= 0; )
    10             {
    11                 if (target == array[i][j])
    12                     return true;
    13                 else if(target > array[i][j])
    14                     i++;
    15                 else
    16                     j--;
    17             }
    18         }
    19         return false;
    20     }
    21 };

             

  • 相关阅读:
    小条打印机输出简析
    Visual Studio离线安装
    删除“Open in Windows Terminal”右键菜单
    《新媒体营销精华:精准定位+爆款打造+匠心运营+内容变现》笔者的新书,欢迎各位粉丝上京东购买
    vue3.0 的 Composition API 的一种使用方法
    对比传统的Xilinx AMP方案和OPENAMP方案-xapp1078和ug1186【转】
    OpenAMP简介【转】
    git 用法【笔记】
    针对非对称多处理系统实现更简单的软件开发【转】
    内核探测工具systemtap简介【转】
  • 原文地址:https://www.cnblogs.com/kks170716/p/7190245.html
Copyright © 2020-2023  润新知