**最近看一本書上寫到的兩個面試題 于是實現了一下 感覺思路很好,大牛略過?:**
**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';
}
~~~
好了 就寫到這里。
- 前言
- C++數據結構與算法------------二叉樹的2種創建
- 二叉樹的創建以及利用迭代實現中序、先序、后序遍歷、清空
- 數據結構-----哈夫曼樹的構造以及遍歷
- 二叉搜索樹的非遞歸創建和搜索
- 二叉搜索樹非遞歸方式刪除節點
- Lua中table內建排序與C/C++/Java/php/等內排序算法的排序效率比較
- 內嵌匯編與C/C++實現的冒泡排序,快速排序算法排序500W個數據對比
- 菜鳥學算法--簡單的交換和最大公約數算法入門篇
- 菜鳥學算法----改進后的歐幾里得算法
- C++實現一個線程安全的單例工廠
- 關于有序二維矩陣查找和字符串替換的兩道算法題
- 算法有序數組合并---在空間足夠的情況下,進行O(n)的合并 并且移動次數最小