刚体验了一下微软的面试,总共历时1个半小时,结果估计悲剧了。问到的和算法相关的问题有以下几个:
1、字符串循环移位程序
编程实现,比如shift("abcde",2), 输出“deabc”.
难点在于要求原地移位,空间复杂度为O(1),时间复杂度不做要求
2、链表中删除一个结点
void delete(ListNode* pHead, ListNode* p)
这里链表可能不是正常的,比如存在环,就是有某个结点指回到前面出现的结点去了,
存在环且查找节点p失败时必须判断是否出现环,否则程序可能死循环,要求O(1)空间复杂度
3、字符串中查找子字符串的位置
int find(char *str1, char *str2)
这个问题的后续问题是请你写出你能想到的测试用例,
主要是考察思考的缜密度,对各种可能出现情况的考虑。
有兴趣的同学可以研究一下。