1.2005年11月15日华为软件研发笔试题。实现一单链表的逆转。
2.编码实现字符串转整型的函数(实现函数atoi的功能),据说是神州数码笔试题。如将字符
串 ”+123”123, ”-0123”-123, “123CS45”123, “123.45CS”123, “CS123.45”0
3.快速排序(东软喜欢考类似的算法填空题,又如堆排序的算法等)
4.删除字符串中的数字并压缩字符串。
如字符串”abc123de4fg56”处理后变为”abcdefg”。注意空间和效率。
(下面的算法只需要一次遍历,不需要开辟新空间,时间复杂度为O(N))
5.求两个串中的第一个最长子串(神州数码以前试题)。
如"abractyeyt","dgdsaeactyey"的最大子串为"actyet"。
解答:
1.ReverseList(ListNode* phead)
2.atoi考虑的要周全
#define INT_MAX ((int)0x7FFFFFFF)
#define INT_MIN ((int)0x80000000)
//#define INT_MAX (~(unsigned int)0/2)
bool valid=true;
int myatoi(constchar * str)
{
bool minus=false;
long long result=0;
valid=false;
if(str==NULL)
return0;
while(*str=='')
str++;
if(*str=='-')
{
inus=true;
str++;
}
else if(*str=='+')
str++;
if(*str<'0'||*str>'9')
return0;
valid=true;
while(*str>='0' && *str<='9')
{
result=result*10+*str-'0';
if((minus && result>INT_MAX + 1LL) || (!minus && result>INT_MAX))
{
valid=false;
return0;
}
str++;
}
if(minus)
result*=-1;
return (int)result;
}
3.主要是Partition的写法
4.
void FuncStr(char* str)
{
char* p1 = str;
char* p2 = str;
while (*p1 != '\0')
{
if(*p1<'0'||*p1>'9')
*p2++ = *p1;
p1++;
}
*p2 = '\0';
}
5.动态规划