**最近看一本书上写到的两个面试题 于是实现了一下 感觉思路很好,大牛略过 :**
**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)的合并 并且移动次数最小