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

    剑指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函数的版本
  • 相关阅读:
    解决Mac下GDB提示签名错误
    hdu 5015 大数量反复类似操作问题/ 矩阵高速幂
    数据运营报表系统思考 一二
    NGUI 3.5教程(二)Label 标签 (Hello world)、多行文本
    STL 源代码剖析 算法 stl_algo.h -- equal_range
    java字符操作获取汉字的拼音以及其它经常使用工具
    SRAM,SDRAM,网卡
    java.lang.NoClassDefFoundError: ognl/PropertyAccessor解决的方法
    纯手工定制西服怎么鉴别
    缝份_百度百科
  • 原文地址:https://www.cnblogs.com/xiaokang01/p/12397160.html
Copyright © 2011-2022 走看看