2014年11月16日

在O(1)时间内删除链表结点 【微软面试100题 第六十题】

摘要: 题目要求: 给定链表的头指针和一个结点指针,在O(1)时间删除该结点。 参考资料:剑指offer第13题。题目分析: 有几种情况: 1.删除的结点是头结点,且链表不止一个结点; 2.删除的结点是头结点,且链表只有一个结点; 3.删除的结点是尾结点,且链表不止一个结点; ... 阅读全文

posted @ 2014-11-16 11:49 tractorman 阅读(328) 评论(0) 推荐(0) 编辑

不能被继承的类 【微软面试100题 第五十九题】

摘要: 题目要求: 用C++设计一个不能被继承的类。 参考资料:剑指offer第48题。题目分析: 方法1:把构造函数设为私有函数,定义共有的静态函数来创建和释放类的实例; 方法2:利用虚拟继承和友元;代码实现: //把构造函数设为私有函数,定义共有的静态函数来创建和释放类的实例class Tem... 阅读全文

posted @ 2014-11-16 11:11 tractorman 阅读(135) 评论(0) 推荐(0) 编辑

从尾到头输出链表 【微软面试100题 第五十八题】

摘要: 题目要求: 输入一个链表的头结点,从尾到头反过来输出每个结点的值。 参考资料:剑指offer第5题。题目分析: 可以用栈或者递归。 栈把链表结点从头到尾依次存储,这样最终栈顶就是链表尾部。 递归,对于当前结点,可以用递归输出当前结点之后的结点,再输出当前结点。代码实现: #include... 阅读全文

posted @ 2014-11-16 10:55 tractorman 阅读(153) 评论(0) 推荐(0) 编辑

2014年11月12日

用两个栈实现队列 【微软面试100题 第五十七题】

摘要: 题目要求: 某队列的声明如下: template class CQueue { public: CQueue() {} ~CQueue() {} void appendTail(const T& node); // append a element to tail ... 阅读全文

posted @ 2014-11-12 22:38 tractorman 阅读(231) 评论(0) 推荐(0) 编辑

2014年11月11日

最长公共子序列 【微软面试100题 第五十六题】

摘要: 题目要求: 如果字符串一的所有字符按其在字符串中的顺序出现在另外一个字符串中,则字符串一称为字符串二的子串。 注意,并不是要求子串(字符串一)的字符必须连续出现在字符串二中。 请编写一个函数,输入两个字符串,求它们的最长公共子序列,并打印出最长公共序列。 例如:输入两个字符串BDCABA和A... 阅读全文

posted @ 2014-11-11 19:40 tractorman 阅读(1002) 评论(0) 推荐(0) 编辑

C++异常安全的赋值运算符重载 【微软面试100题 第五十五题】

摘要: 题目要求: 类CMyString的声明如下:class CMyString{public: CMyString(char *pData=NULL); CMyString(const CMyString &str); ~CMyString(void); CMyString &... 阅读全文

posted @ 2014-11-11 18:35 tractorman 阅读(201) 评论(0) 推荐(0) 编辑

调整数组顺序使奇数位于偶数前面 【微软面试100题 第五十四题】

摘要: 题目要求: 输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。 要求时间复杂度为O(n). 参考资料:剑指offer第14题。题目分析: 使用两个指针,pBegin和pEnd,pBegin从开头往后遍历,pEnd从结尾往前遍历,当pBegin... 阅读全文

posted @ 2014-11-11 18:19 tractorman 阅读(177) 评论(0) 推荐(0) 编辑

字符串的排列 【微软面试100题 第五十三题】

摘要: 题目要求: 输入一个字符串,打印出该字符串中字符的所有排列。 例如输入字符串abc,则输出字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab、cba。 参考资料:剑指offer第28题。题目分析: 1. 输出的字符串必须包含原字符串的所有字符,只是字符顺序换了; ... 阅读全文

posted @ 2014-11-11 15:37 tractorman 阅读(202) 评论(0) 推荐(0) 编辑

二元树的深度 【微软面试100题 第五十二题】

摘要: 题目要求: 输入一颗二叉树的根结点,求该树的深度。 从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 如 3 / \ 4 \ 2,深度为3 参考链接:剑指offer第39题。题目分析: 用递归的方式从根结点开始,遍历其... 阅读全文

posted @ 2014-11-11 14:07 tractorman 阅读(183) 评论(0) 推荐(0) 编辑

2014年11月8日

和为n连续正数序列 【微软面试100题 第五十一题】

摘要: 题目要求: 输入一个正数n,输出所有和为n连续正数序列(至少两个)。 例如输入15,由于1+2+3+4+5 = 4+5+6 = 7+8 = 15.所以输出3个连续序列1~5,4~6,7~8. 参考资料:剑指offer第41题。题目分析: 由题意可知:从1~n中找连续的整数序列。 可以用两个... 阅读全文

posted @ 2014-11-08 22:37 tractorman 阅读(295) 评论(0) 推荐(0) 编辑

一道看上去很吓人的算法题 【微软面试去100题 第四十九题】

摘要: 题目要求: 如何对n个数进行排序,要求时间复杂度O(N).空间复杂度为O(1).题目分析: 严格的说,这道题给出的条件不全。如果这n个数字的大小跨度很大(1~无穷大),则肯定达不到要求。 如果n个数字的大小在一定范围内(如0~65535),则可以用hash表的方法。定义为int hash[65... 阅读全文

posted @ 2014-11-08 22:20 tractorman 阅读(225) 评论(0) 推荐(0) 编辑

在左移的递减数组中查找某数 【微软面试100题 第四十八题】

摘要: 题目要求: 一个数组是由一个递减数列左移若干位形成的,比如{4,3,2,1,6,5}是由{6,5,4,3,2,1,}左移两位形成的,在这种数组中查找某个数。题目分析: 方法1 逐个查找,遍历一遍数组,时间复杂度O(N). 方法2 二分查找,时间复杂度O(logN).具体分析见下图:代码实现:#... 阅读全文

posted @ 2014-11-08 21:45 tractorman 阅读(248) 评论(0) 推荐(0) 编辑

2014年11月7日

最长递减子序列 【微软面试100题 第四十七题】

摘要: 题目要求: 求一个数组的最长递减子序列; 比如{9,4,3,2,5,4,3,2}的最长递减子序列为{9,5,4,3,2}。代码实现:代码1:动态规划,时间复杂度O(N^2).#include using namespace std;const int N = 8;int Lis(int a[],... 阅读全文

posted @ 2014-11-07 19:05 tractorman 阅读(228) 评论(0) 推荐(0) 编辑

括号问题 【微软面试100题 第四十六题】

摘要: 题目要求: 四对括号可以有多少种匹配排列方式?比如两对括号可以有两种:()()和(())题目分析: 之前左括号的数量必须比右括号多,即卡特兰数, 令h(0)=1,h(1)=1,catalan数满足递推式, h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1... 阅读全文

posted @ 2014-11-07 15:41 tractorman 阅读(214) 评论(0) 推荐(0) 编辑

矩阵运算 【微软面试100题 第四十五题】

摘要: 题目要求: 对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右)某一个元素也加一,现给出以正数矩阵,判断其是否能够由一个全零矩阵经过上述运算得到。题目分析: 使用贪心算法。代码实现: #include using namespace std;const int N =... 阅读全文

posted @ 2014-11-07 15:33 tractorman 阅读(428) 评论(0) 推荐(0) 编辑

设计一个魔方(六面)的程序 【微软面试100题 第四十四题】

摘要: 题目要求: 设计一个魔方(六面)的程序。题目分析: 把魔方从正面看展开成一个平面,如图1所示。设计一个类,其中Spacexy[SPACE][LEN][LEN];中的SPACE为0~5表示六个面,每个数字代表哪一面见图1.LEN为0~2,[LEN][LEN]表示某个面的3*3的9个格子。 类中的... 阅读全文

posted @ 2014-11-07 15:21 tractorman 阅读(2389) 评论(0) 推荐(0) 编辑

2014年11月6日

二叉搜索树的非递归前中后序遍历 【微软面试100题 第四十三题】

摘要: 题目要求: 实现二叉搜索树的前序、中序、后序非递归遍历。题目分析: 非递归前序遍历:使用一个辅助栈,出栈一个结点并输出该结点,同时依次入栈该结点的右结点和左结点,再出栈,入栈...; 非递归中序遍历:使用一个辅助栈和一个临时结点,临时结点不断找树的左子树,知道为空,然后又跳到空结点父结点的右子... 阅读全文

posted @ 2014-11-06 21:44 tractorman 阅读(244) 评论(0) 推荐(0) 编辑

合并链表 【微软面试100题 第四十二题】

摘要: 题目要求: 两个非降序链表的并集,1->2->3和2->3->5合并为1->2->3->5. 另外只能输出结果,不能修改两个链表的数据。题目分析: 1.不能修改原链表数据:即,输出1->2->3->5后,原来的两个链表还是1->2->3和2->3->5。因此输出的这些结点都需要重新申请空间存放... 阅读全文

posted @ 2014-11-06 18:55 tractorman 阅读(182) 评论(0) 推荐(0) 编辑

珠子问题 【微软面试100题 第四十题】

摘要: 题目要求: 一串首尾相连的珠子(m个),有N种颜色(N=nLen) Break;} 阅读全文

posted @ 2014-11-06 18:09 tractorman 阅读(286) 评论(0) 推荐(0) 编辑

求一个有向连通图的割点 【微软面试100题 第三十九题】

摘要: 题目要求: 求一个有向连通图的割点。割点的定义是,如果除去此结点和与其相关的边,有向图不再连通,描述算法。题目分析: 判断某个点是否是割点的方法是,删除该点和与其相关的边,然后求连通性;这样逐个删除点(每次有且只删除一个点),就可以判断该图的割点有哪些了。 判断图连通性的方法:从一个点出发,如... 阅读全文

posted @ 2014-11-06 16:47 tractorman 阅读(229) 评论(0) 推荐(0) 编辑

导航

统计

点击右上角即可分享
微信分享提示