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


    剑指offer:二维数组中的查找

    在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。

    请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

    //思路:首先选一个右上角的元素,当target大于这个元素,说明不在这一行,直接下一行(排除此行)(i++)

    // 当target小于这个元素,说明这一列向下都没有,找前一列(排除此列) j--

    ac代码:

    class Solution {
    public:
       //思路:首先选一个右上角的元素,当target大于这个元素,说明不在这一行,直接下一行(i++)
        // 当target小于这个元素,说明这一列向下都没有,找前一列 j--
        bool Find(int target, vector<vector<int>> &array)
        {
            int row = array.size(); //
            int col = array[0].size(); //
            int i = 0, j = col-1;   // j是最后一列
    //        bool flag = false;
    
            while(i < row && j >= 0)
            {
                if (target == array[i][j])
                {
                    return true;
                }
                else if (target > array[i][j]) // 大于前行的最后一个,说明不在这一行i++
                {
                    i++;
                }
                else if (target < array[i][j]) // 小于当前行的最后一个,说明不在这一列,j--
                {
                    j--;
                }
            }
            return false;
        }
    };

    加上main函数的版本

     1 #include <iostream>
     2 #include <vector>
     3 using namespace std;
     4 // 判断当前行的最后一个数是否大于目标值,
     5 //如果大于则当前行不存在,进入下一行
     6 class Solution {
     7 public:
     8     bool Find(int target, vector<vector<int> > &array) {
     9         int row = array.size();  //
    10         int col = array[0].size();  //
    11 
    12 
    13         for(int i  = 0; i < row; i++)
    14         {
    15             if (target > array[i][col-1])
    16                 continue;
    17             for( int j = 0; j < col; j++)
    18             {
    19                 if (target == array[i][j])
    20                 {
    21                     return true;
    22                 }
    23             }
    24         }
    25         return false;
    26 
    27     }
    28 
    29     //思路:首先选一个右上角的元素,当target大于这个元素,说明不在这一行,直接下一行(i++)
    30     // 当target小于这个元素,说明这一列向下都没有,找前一列 j--
    31     bool find2(int target, vector<vector<int>> &array)
    32     {
    33         int row = array.size(); //
    34         int col = array[0].size(); //
    35         int i = 0, j = col-1;   // j是最后一列
    36 //        bool flag = false;
    37 
    38         while(i < row && j >= 0)
    39         {
    40             if (target == array[i][j])
    41             {
    42                 return true;
    43             }
    44             else if (target > array[i][j]) // 大于前行的最后一个,说明不在这一行i++
    45             {
    46                 i++;
    47             }
    48             else if (target < array[i][j]) // 小于当前行的最后一个,说明不在这一列,j--
    49             {
    50                 j--;
    51             }
    52         }
    53         return false;
    54     }
    55 };
    56 int main()
    57 {
    58     Solution s;
    59     int t = 1;
    60     vector<vector<int> > arra(4,vector<int>(3,0));  // 4行三列
    61     for (int i = 0; i  < 4; i++)
    62     {
    63         for (int j = 0; j < 3; j++)
    64         {
    65             arra[i][j] = t++;
    66         }
    67     }
    68     for (int i = 0; i  < 4; i++)
    69     {
    70         for (int j = 0; j < 3; j++)
    71         {
    72             cout << arra[i][j]<<" ";
    73         }
    74         cout << endl;
    75     }
    76 
    77     cout << endl;
    78     bool falg =  s.find2(40, arra);
    79     cout << falg;
    80 
    81     return 0;
    82 }
    83 //std::vector<std::vector<int> > vec(row,vector<int>(col,0));
    84  //初始化row * col二维动态数组,初始化值为0
    加上main函数的版本
  • 相关阅读:
    ZooKeeper-3.3.4集群安装配置
    zookeeper原理(转)
    flume 转
    Flume NG 简介及配置实战
    Flume NG 配置详解
    '增量赋值(augmented assignment)', 多么痛的领悟!
    用matplotlib制作的比较满意的蜡烛图
    Spyder code editor里的小秘密: 右侧高亮提示
    pywinauto: 导入时遇到 "TypeError: LoadLibrary() argument 1 must be string, not unicode"
    爬取新浪财经个股的历史财报摘要
  • 原文地址:https://www.cnblogs.com/xiaokang01/p/12397160.html
Copyright © 2020-2023  润新知