剑指offer 二维数组的查找

来源:互联网 发布:apk优化 编辑:程序博客网 时间:2024/05/16 13:46

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

例如对于下面的矩阵A

A=124624788910119121315

如果我们要查找7,则返回true,如何查找5,则返回false.


代码实现:

#include <vector>#include <iostream>bool findElem(const std::vector<int> v, int rows, int cols, int number){    bool found = false;    if (!v.empty())    {        int row = 0;    int col = cols -1;    while (row < rows && col >=0)    {        if (v[cols*row+col] == number)        {            found = true;        break;        }        else if (v[cols*row+col] > number)         {            --col;        }        else         {            ++row;        }    }    }    return found;}int main(){    std::cout << "输入数组的行rows和列cols : ";    int rows, cols;    std::cin >> rows >> cols;    std::cout << std::endl << "输入数组中的元素: " << std::endl;    std::vector<int> v;    //数组中的每个元素用elem表示    int elem;    for  (int i = 0; i < rows; i++)        for (int j = 0; j < cols; j++)    {           std::cin >> elem;        v.push_back(elem);    }    std::cout << "打印输入的数组 : " << std::endl;    for (int i = 0; i < rows; i++)    {        for (int j = 0; j < cols; j++)    {            std::cout << v[i*cols+j] << "\t";    }    std::cout << std::endl;    }    std::cout << "输入要查找的元素 : " << std::endl;    //要查找的数number    int number;    while (std::cin >> number)    {      if(findElem(v, rows, cols, number))         std::cout << "found success" << std::endl;      else          std::cout << "non found " << number << std::endl;      std::cout << "输入要查找的元素 : " << std::endl;;     }    return 0;}
原创粉丝点击