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函数的版本
  • 相关阅读:
    立个铁矿石的flag,从7月初开始,铁矿石的库存,可能要进入累库存阶段了.
    让你的 vs code 跑在云上,用手机浏览器就能写代码
    ASP.NET Core 2 High Performance 目录和读书笔记
    [转帖]无网络离线安装 vs2017
    centos下 .net core 2.0 升级 到 2.1 遇到的一个小问题
    .net core jwt 入门记录
    GTX 750TI 使用 ffmpeg 时无法用 GPU HEVC(h.265) 进行加速
    [翻译] 编写高性能 .NET 代码--第二章 GC -- 减少大对象堆的碎片,在某些情况下强制执行完整GC,按需压缩大对象堆,在GC前收到消息通知,使用弱引用缓存对象
    [翻译] 编写高性能 .NET 代码--第二章 GC -- 将长生命周期对象和大对象池化
    [翻译] 编写高性能 .NET 代码--第二章 GC -- 避免使用终结器,避免大对象,避免复制缓冲区
  • 原文地址:https://www.cnblogs.com/xiaokang01/p/12397160.html
Copyright © 2011-2022 走看看