算法练习 之0918
来源:互联网 发布:类的定义 c语言 编辑:程序博客网 时间:2024/05/17 19:14
第一题:
请实现一个算法改变一个整数的存储方式(低到高;高到低) 如0x12345678转成0x78563412
void reverse_dword(unsigned char* dwNum,int len)
{
if (len<=1 || NULL == dwNum)
{
return ;
}
unsigned char dwTemp = *dwNum;
*dwNum = *(dwNum + len -1);
*(dwNum + len -1) = dwTemp;
reverse_dword(dwNum+1,len -2);
}
正常一个dword是四个字节,dword* p 每次移动4个字节
转换成unsigned char*以后,每次p移动一个字节。
然后把第一个字节(12)和最后一个字节(78)顺序调换。
中间的(34)和(56)进行调换。
第二题:
实现char *strstr(const char *s1, const char *s2)
strstr(“hello world”, “orl”)输出”orld”
strstr(“hello world”, “xyz”)输出NULL
char *MyStrstr(char *dstStr, char *partenStr)
{
//记录s1,s2的指针
char* pStr = dstStr;
char* pSubStr = NULL;
char* pStrTemp = NULL;
//判断partenStr为NULL
if (!partenStr)
{
return pStr;
}
//外循坏的指针向前跑
while (*pStr)
{
pStrTemp = pStr;
pSubStr = partenStr;
while (*pStrTemp && &*pSubStr)
{
if (*pStrTemp == *pSubStr)
{
pStrTemp++;
pSubStr++;
}
else
{
break;
}
}
//子串走到末尾
if (*pSubStr == '\0')
{
return pStr;
}
pStr++;
}
return NULL;
}
这个没啥说的,效率比较低,有兴趣的小伙伴可以看下网上的KMP算法。
第三题:
将一个字符串按照单词逆置,如”hello world””world hello”
//旋转整个字符串
void ReverseSimple(char* pchWord, unsigned int nLen)
{
if (NULL == pchWord)
{
return;
}
for (unsigned int nIndex = 0; nIndex < nLen/2; ++nIndex)
{ char chTemp = pchWord[nIndex];
pchWord[nIndex] = pchWord[nLen-1-nIndex];
pchWord[nLen-1-nIndex] = chTemp;
}
}
void ReverseByWord(char* pchSentence)
{
if (NULL == pchSentence)
{
return;
}
//字符串整体逆置
ReverseSimple( pchSentence, mystrlen(pchSentence) );
//两个指针一前一后
char *pFirst , *pSecond = pchSentence;
while(' ' == *pSecond)
{
++pSecond;
}
if ('\0' == *pSecond)
{
return;
}
pFirst = pSecond;
for ( ; *pSecond != '\0'; ++pSecond)
{
if (*pSecond != ' ')
{
continue;
}
ReverseSimple( pFirst, pSecond - pFirst );
//再寻找下一个单词的开始位置,以空格作为判断
while(' ' == *pSecond)
++pSecond;
if ('\0' == *pSecond)
{
break;
}
pFirst = pSecond;
}
ReverseSimple(pFirst,pSecond - pFirst);
}
计算一个整数的二进制中有多少个1
思路:整数n,n = n&(n-1) 能去掉n二进制中末尾的1,从而来统计1的个数。
- 算法练习 之0918
- 算法之递归练习
- 算法练习之KMP算法
- 算法练习之水题
- 算法练习之水题
- 算法练习之水题
- 算法练习之水题
- 算法练习之约瑟夫环
- 算法练习之二叉树
- 算法练习之水题
- 算法练习之水题
- 算法练习之水题
- 算法练习之水题
- 算法基础之字符串练习
- CTFCrypto练习之RSA算法
- 算法练习之 (汉诺塔)
- 算法练习之石子归并
- [算法练习]贪心算法之活动安排
- 关于Thinkphp里面的$this->display();的解说及说明
- [LeetCode 273] Integer to English Word
- Linux-Ubuntu下录制 和 制作 Gif 图片
- Windows下播放WAV音频文件
- 5步学会使用VideoView 播放视频
- 算法练习 之0918
- 顺序循环队列的基本操作
- 26条深度学习经验
- 对于Oracle中分页排序查询语句执行效率的比较分析
- 使用GCD
- 设计模式之模板方法
- 以销售角度看Android学习
- UVa 10443 - Rock
- jQuery