zoukankan      html  css  js  c++  java
  • 剑指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 };

             

  • 相关阅读:
    POJ 1426 Find The Multiple(数论——中国同余定理)
    POJ 2253 Frogger(Dijkstra变形——最短路径最大权值)
    POJ 3790 最短路径问题(Dijkstra变形——最短路径双重最小权值)
    POJ 3278 Catch That Cow(模板——BFS)
    HDU 1071 The area
    HDU 1213 How Many Tables(模板——并查集)
    POJ 1611 The Suspects
    light oj 1214 Large Division
    POJ 1258 Agri-Net(Prim算法求解MST)
    POJ 2387 Til the Cows Come Home(模板——Dijkstra算法)
  • 原文地址:https://www.cnblogs.com/kks170716/p/7190245.html
Copyright © 2011-2022 走看看