最近看一本书上写到的两个面试题 于是实现了一下 感觉思路很好,大牛略过 :
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';
}
好了 就写到这里。