常见问题整理

时间:2023-01-15 04:41:50

1 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。(来自牛客网,剑指offer)

  1 // IO_Solution.cpp : 定义控制台应用程序的入口点。
  2 //
  3 
  4 #include "stdafx.h"
  5 #include <vector>
  6 using namespace std;
  7 
  8 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  9 
 10 //在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。
 11 //请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
 12 
 13 //首先构造这样一个二维向量
 14 void BuildDstArray(vector<vector<int>>&Array)
 15 {
 16     int nRow = Array[0].size();
 17     int nColumn = Array.size();
 18     for (int i = 0; i < nColumn; i++)
 19     {
 20         for (int j = 0; j < nRow; j++)
 21         {
 22             Array[i][j] = i*nRow + j;
 23         }
 24     }
 25 
 26     for (int i = 0; i < nColumn; i++)
 27     {
 28         for (int j = 0; j < nRow; j++)
 29         {
 30             printf("%4d", Array[i][j]);
 31         }
 32         printf("\n");
 33     }
 34 
 35 }
 36 
 37 //最差情况复杂度为:n+m
 38 bool TwoDemoArrayFind(vector<vector <int>>Array,int nDst)
 39 {
 40     bool bFound = false;
 41     if (Array.empty())
 42     {
 43         return bFound;
 44     }
 45     else
 46     {
 47         int nCurRow = 0;
 48         int nCurCol = 0;
 49         int nRows = Array[0].size();
 50         int nCols = Array.size();
 51 
 52         while (nCurRow < nRows&&nCurCol >= 0)
 53         {
 54             if (Array[nCurCol][nCurRow] == nDst)
 55             {
 56                 printf("位置:{%d,%d}",nCurCol,nCurRow);
 57                 bFound = true;
 58                 break;
 59             }
 60             else
 61             {
 62                 if (Array[nCurCol][nCurRow] > nDst)
 63                 {
 64                     nCurRow--;
 65                 }
 66                 else
 67                 {
 68                     nCurCol++;
 69                 }
 70             }
 71 
 72         }
 73         return bFound;
 74 
 75     }
 76 
 77 
 78 }
 79 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 88 int main()
 89 {
 90     //构造并初始化一个二维向量:4行5列
 91     vector<vector<int>> Array(4, vector<int>(5, 1));
 92 
 93     //另外一种构造二维向量的方法
 94     vector<vector<int>> a;
 95     a.resize(4);
 96     for (int i = 0; i < 4; i++)
 97     {
 98         a[i].resize(5);
 99     }
100 
101     BuildDstArray(a);
102     TwoDemoArrayFind(a,10);
103 
104 
105 
106     getchar();
107     return 0;
108 }

 2 

请实现一个函数,将一个字符串中的空格替换成“ % 20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
//注意如果输出的是%20d需要对%进行转义

//用Stl中的vector时间复杂度为:O(str.length());空间复杂度O(str.length+3*SpaceNum)

 1 void ReplaceSpace( string strSrc,char *sOut)
 2 { 
 3     vector<char> cOut;
 4     const char *pStr = strSrc.data();
 5     while (*pStr != '\0')
 6     {
 7         if (*pStr == ' ')
 8         {
 9             cOut.push_back('%');
10             cOut.push_back('2');
11             cOut.push_back('0');
12         }
13         else
14             cOut.push_back(*pStr);
15         pStr++;
16     }
17     cOut.push_back('\0');
18 
19     for (int i = 0; i < cOut.size(); i++)
20     {
21         sOut[i] = cOut[i];
22     }
23 
24 }
25 
26 //Test
27   string str= "ni hao ma";
28     char pStr[32] = {0};
29     ReplaceSpace(str,pStr);
30     printf("%s",pStr);
31     getchar();
32     return 0;