新鲜出炉的阿里2013年实习笔试题2道。
第一题,
T(n)=0,n<=1;
T(2n)=1+T(n/2)+n*n;
求复杂度。
第二题。
写一个程序实现下面转化:
输入"www.taobao.com"这样一个字符串,转化为“com.taobao.www”,
或者“sports.sina.com.cn”转为为"cn.com.sina.sports".
忘大神们前来讨论。。有点不会!
[解决办法]
[root@vps616 cpp]# ./main
[www.baidu.com] -> [com.baidu.www]
[www.qq.com] -> [com.qq.www]
[client.baidu.com] -> [com.baidu.client]
[cdn.youku.com] -> [com.youku.cdn]
[www.taobao.com] -> [com.taobao.www]
[sports.sina.com.cn] -> [cn.com.sina.sports]
[] -> []
[abc] -> [abc]
[abc.1] -> [1.abc]
[abc.23] -> [23.abc]
[root@vps616 cpp]# cat main.cpp
#include <stdio.h>
#include <stdlib.h>
static inline void _do_string_reverse(char *str, int len)
{
char *beg = str;
char *end = str + len - 1;
for ( ; beg < end; ++beg, --end) {
char temp = *beg;
*beg = *end;
*end = temp;
}
}
int string_reverse(char *str, const char token)
{
if (!str
[解决办法]
token == '\0')
return -1;
int wbeg, wend;
for (wbeg = wend = 0; str[wend]; ++wend) {
if (str[wend] == token) {
_do_string_reverse(str + wbeg, wend - wbeg);
wbeg = wend + 1;
}
}
_do_string_reverse(str + wbeg, wend - wbeg);
_do_string_reverse(str, wend);
return 0;
}
int main(int argc, char *const argv[])
{
char test_cases[][64] = {
"www.baidu.com", "www.qq.com", "client.baidu.com",
"cdn.youku.com", "www.taobao.com", "sports.sina.com.cn",
"", "abc", "abc.1", "abc.23"
};
int i;
for (i = 0; i < (int)(sizeof(test_cases) / sizeof(test_cases[0])); ++i) {
printf("[%s] -> ", test_cases[i]);
string_reverse(test_cases[i], '.');
printf("[%s]\n", test_cases[i]);
}
return 0;
}
[解决办法]
第二题2楼已经给出正确代码了,有啥好讨论的
第一题看不懂,是不是出错了?如果没错n只能是2^k,这个结果就是logn了