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