C++笔试题(剑指offer 面试题3 二维数组中查找数)

来源:互联网 发布:中小学创新设计软件 编辑:程序博客网 时间:2024/05/30 04:44
#ifndef F_FIND_WORK_TEST3_ARRAY_20171030_JHASKDFJHASF_H_#define F_FIND_WORK_TEST3_ARRAY_20171030_JHASKDFJHASF_H_#include <stdio.h>/*剑指offer 面试题3二维数组中查找在一个二维维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上都下递增的顺序排序。请完成一个函数,输入这样一个二维数组 和 一个整数,1)判断数组中是否存在这个整数2)如果存在,通过引用返回索引。二维数组格式如下1,  4,  7,  102,  6,  9,  128,  12, 13, 1514, 16, 17, 19方法:将需要查找的数, 与右上角的数作对比,一行,一列的排除,每次缩小查找范围。减少循环次数。*/BOOL FindDataFromArray(int *pArrayData, const int nRows, const int nColumns, const int nFindData, int& nIndex);bool FindDataFromVector(vector<vector<int>> vArray, const int nValue);//测试void F_Test3_Array(){    int nIndex(-1);    //二维数组    int nArray[4][4] = {{3,5,6,9},                         {7,8,10,12},                         {11,13,14,16},                        {17,19,20,23}};    BOOL bIsFindData = FindDataFromArray(*nArray, 4, 4, 13, nIndex);    //一维数组    int nArray1[] = {3,5,6,9, 7,8,10,12, 11,13,14,16, 17,19,20,23};    BOOL bIsFindData1 = FindDataFromArray(nArray1, 4, 4, 16, nIndex);    //不存在    bIsFindData1 = FindDataFromArray(nArray1, 4, 4, 116, nIndex);    //容器存储数据,类似于维维数组    vector<vector<int>> vArray;    vector<int> vTemp;    for(int i=0; i<4; i++)    {        for(int j=0; j<4; j++)        {            vTemp.push_back(nArray[i][j]);        }        vArray.push_back(vTemp);        vTemp.clear();    }    bIsFindData = FindDataFromVector(vArray, 7);}BOOL FindDataFromArray(int *pArrayData, const int nRows, const int nColumns, const int nFindData, int& nIndex){    BOOL bIsFindData(FALSE);    if(pArrayData && (nRows > 0) && (nColumns > 0))    {        int nCurData(0);        int nCurRow(0);        int nCurColumn = nColumns - 1;        while((nCurRow < nRows) && (nCurColumn > 0))        {            nIndex = nCurRow*nColumns + nCurColumn;            nCurData = pArrayData[nIndex];            if(nCurData == nFindData)            {                bIsFindData = TRUE;                break;            }            else if(nCurData < nFindData)            {                nCurRow++;            }            else            {                nCurColumn--;            }        }    }    nIndex = bIsFindData == 0 ? -1: nIndex;    return bIsFindData;}bool FindDataFromVector(vector<vector<int>> vArray, const int nFindValue){    if(vArray.empty())    {        return false;    }    bool bIsFindValue(false);    int nRow = vArray.size();    int nColumn = vArray[0].size();    int nCurRow(0);    int nCurColumn(0);    for(; nCurRow<nRow; )    {        int nCurData = vArray[nCurRow][nColumn-1];        if(nCurData == nFindValue)        {            bIsFindValue = true;            break;        }        else if(nCurData < nFindValue)        {            nCurRow++;        }        else        {            nColumn--;        }    }    return bIsFindValue;}#endif//F_FIND_WORK_TEST3_ARRAY_20171030_JHASKDFJHASF_H_
阅读全文
0 0
原创粉丝点击