最近看一本书上写到的两个面试题 于是实现了一下 感觉思路很好,大牛略过 :
1、对于一个二维矩阵,从左到右 从上到下 都是递增的,如何判断一个值是否在矩阵内部?(C实现 实现复杂度 O(n))
bool FindInTwoDimensionalMatrix(int*pMatrix,int iRows,int iCols,int iFindVal)
{
bool bFind=false ;
if(pMatrix==0||iRows<=0||iCols<=0)
return bFind ;
int iRow=0,iCol=iCols-1;
while(iRow<iRows&&iCol>=0)
{
if(pMatrix[iRow*iCols+iCol]==iFindVal)
{
bFind=true ;
break;
}else if(pMatrix[iRow*iCols+iCol]>iFindVal)
--iCol;
else
++iRow;
}
return bFind ;
}
2、在一个内存足够大的空间中,存储的 一串字符序列,替换其中的空格为 %20?(C实现,时间复杂度 O(n))
void ReplaceCharInEnoughMemory(char*pStr)
{
if(pStr==0)
return ;
//计算空格个数
int nSpace=0 ;
int nLen=strlen(pStr);
char *pBehand,*pFront;
char *pTem=pStr;
//计算空格个数
for(;;)
{
//0 结尾 '\0'
if(*pTem=='\0')
break;
else if(*pTem==0x20)
{
++nSpace;
}
pTem++;
}
//后面等于 '\0'需要添上
pBehand=pStr+nLen-1+nSpace*2;
pFront=pStr+nLen-1;
for(;;)
{
if(*pFront!=0x20){
*pBehand=*pFront ;
}else{
*pBehand='0';
*(--pBehand)='2';
*(--pBehand)='%';
}
if(pFront==pStr)
break ;
pBehand--;
pFront--;
}
//结尾
*(pStr+nLen-1+nSpace*2+1)='\0';
}
好了 就写到这里。