面试题(C++)
亦卯
c++软件工程师
展开
-
微软面试题 1
题:.编写反转字符串的程序,要求优化速度、优化空间。 分析:构建两个迭代器p 和 q ,在一次遍历中,p的位置从字串开头向中间前进,q从字串末尾向中间后退,反转字串只要每次遍历都交换p和q所指向的内容即可,直到p和q在中间相遇,这时循环次数刚好等于 字串的长度/2。 实现代码转载 2011-08-26 19:30:23 · 257 阅读 · 0 评论 -
微软面试题3
题:怎样从顶部开始逐层打印二叉树结点数据?请编程。 分析:不用递归,定义两个栈(或数组),也能方便漂亮地搞定。首先栈1存储第一层中的节点也就是根节点,然后每次循环,打印栈1中的元素,再将栈1中的节点更新为下一层中的节点。总共循环logn+1次。 实现代码(转载 2011-08-26 19:34:22 · 234 阅读 · 0 评论 -
微软面试题 5
题:两个链表,一升一降。合并为一个升序链表。 分析:(假设升序的链表为链表1,降序的链表为链表2,p1,p2分别作为它们的迭代器,还有一个合并链表用于存放合并后的数据) 法一、最容易想到的且容易实现的就是使两个表都变成升序,然后就是经典的合并排序算法的步骤了,步骤是构建p1,转载 2011-08-26 20:15:31 · 296 阅读 · 0 评论 -
微软面试题day 7(找数组中唯一出现两次的数)
题:假设你有一个用1001个整数组成的数组,这些整数是任意排列的,但是你知道所有的整数都在1到1000(包括1000)之间。此外,除一个数字出现两次外,其他所有数字只出现一次。假设你只能对这个数组做一次处理,用一种算法找出重复的那个数字。如果你在运算中使用了辅助的存储方式,那么你转载 2011-08-26 20:19:26 · 279 阅读 · 0 评论 -
微软面试题 2
题:.给出洗牌的一个算法,并将洗好的牌存储在一个整形数组里。 分析:首先54张牌分别用0到53 的数值表示并存储在一个整形数组里,数组下标代表纸牌所在的位置。接下来,遍历整个数组,在遍历过程中随机产生一个随机数,并以该随机数为下标的数组元素与当前遍历到的数组元素进行对换转载 2011-08-26 19:32:31 · 309 阅读 · 0 评论 -
微软面试题4 (最长等差数列)
题:求随机数构成的数组中找到长度大于=3的最长的等差数列 输出等差数列由小到大: 如果没有符合条件的就输出[0,0] 格式: 输入[1,3,0,5,-1,6] 输出[-1,1,3,5] 要求时间复杂度,空间复杂度尽量小 分析:基本算法思路(采用动态规划思想转载 2011-08-26 19:51:52 · 390 阅读 · 0 评论 -
微软面试题day 6(打印所有对称子串)
题:1、如何判断一个字符串是对称的?如a,aa,aba。 2、如何利用2函数找出一个字符串中的所有对称子串? 分析: 且看第一个问题判断字符串对称,有以下两种方法。 方法一、使迭代器p1指向头,p2指向尾转载 2011-08-26 20:17:59 · 402 阅读 · 0 评论