摘要:题目要求: 输入两个字符串,从第一个字符串中删除第二个字符串中所有的字符。例如,输入"They are students."和"aeiou",则删除之后的第一个字符串变成了"Thy r stdnts.".题目分析: 1. 把第二个字符串的所有字符都存入一个set中; 2. 遍历第一个字符串的每...
阅读全文
摘要:题目要求: 两个无环单向链表,找出它们的第一个公共结点。 参考资料:剑指offer第37题。题目分析: 代码实现: #include using namespace std;typedef struct ListNode{ struct ListNode *next; int d...
阅读全文
摘要:题目要求: 一个整型数组里除了两个数字机之外,其他的数字都出现了两次。 请写程序找出这两个只出现一次的数字。要求时间复杂度O(N).空间复杂度O(1). 参考资料:剑指offer第40题。题目分析: 已知: 1.两个相同的数字异或的结果为0,即a^a = 0. 2.两个不相同的数...
阅读全文
摘要:题目要求: 给定链表的头指针和一个结点指针,在O(1)时间删除该结点。 参考资料:剑指offer第13题。题目分析: 有几种情况: 1.删除的结点是头结点,且链表不止一个结点; 2.删除的结点是头结点,且链表只有一个结点; 3.删除的结点是尾结点,且链表不止一个结点; ...
阅读全文
摘要:题目要求: 用C++设计一个不能被继承的类。 参考资料:剑指offer第48题。题目分析: 方法1:把构造函数设为私有函数,定义共有的静态函数来创建和释放类的实例; 方法2:利用虚拟继承和友元;代码实现: //把构造函数设为私有函数,定义共有的静态函数来创建和释放类的实例class Tem...
阅读全文
摘要:题目要求: 输入一个链表的头结点,从尾到头反过来输出每个结点的值。 参考资料:剑指offer第5题。题目分析: 可以用栈或者递归。 栈把链表结点从头到尾依次存储,这样最终栈顶就是链表尾部。 递归,对于当前结点,可以用递归输出当前结点之后的结点,再输出当前结点。代码实现: #include...
阅读全文
摘要:题目要求: 输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。 要求时间复杂度为O(n). 参考资料:剑指offer第14题。题目分析: 使用两个指针,pBegin和pEnd,pBegin从开头往后遍历,pEnd从结尾往前遍历,当pBegin...
阅读全文
摘要:题目要求: 输入一颗二叉树的根结点,求该树的深度。 从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 如 3 / \ 4 \ 2,深度为3 参考链接:剑指offer第39题。题目分析: 用递归的方式从根结点开始,遍历其...
阅读全文
摘要:题目要求: 输入一个正数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中找连续的整数序列。 可以用两个...
阅读全文
摘要:题目要求: 如何对n个数进行排序,要求时间复杂度O(N).空间复杂度为O(1).题目分析: 严格的说,这道题给出的条件不全。如果这n个数字的大小跨度很大(1~无穷大),则肯定达不到要求。 如果n个数字的大小在一定范围内(如0~65535),则可以用hash表的方法。定义为int hash[65...
阅读全文
摘要:题目要求: 一个数组是由一个递减数列左移若干位形成的,比如{4,3,2,1,6,5}是由{6,5,4,3,2,1,}左移两位形成的,在这种数组中查找某个数。题目分析: 方法1 逐个查找,遍历一遍数组,时间复杂度O(N). 方法2 二分查找,时间复杂度O(logN).具体分析见下图:代码实现:#...
阅读全文
摘要:题目要求: 求一个数组的最长递减子序列; 比如{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[],...
阅读全文
摘要:题目要求: 对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右)某一个元素也加一,现给出以正数矩阵,判断其是否能够由一个全零矩阵经过上述运算得到。题目分析: 使用贪心算法。代码实现: #include using namespace std;const int N =...
阅读全文
摘要:题目要求: 设计一个魔方(六面)的程序。题目分析: 把魔方从正面看展开成一个平面,如图1所示。设计一个类,其中Spacexy[SPACE][LEN][LEN];中的SPACE为0~5表示六个面,每个数字代表哪一面见图1.LEN为0~2,[LEN][LEN]表示某个面的3*3的9个格子。 类中的...
阅读全文
摘要:题目要求: 实现二叉搜索树的前序、中序、后序非递归遍历。题目分析: 非递归前序遍历:使用一个辅助栈,出栈一个结点并输出该结点,同时依次入栈该结点的右结点和左结点,再出栈,入栈...; 非递归中序遍历:使用一个辅助栈和一个临时结点,临时结点不断找树的左子树,知道为空,然后又跳到空结点父结点的右子...
阅读全文
摘要:题目要求: 两个非降序链表的并集,1->2->3和2->3->5合并为1->2->3->5. 另外只能输出结果,不能修改两个链表的数据。题目分析: 1.不能修改原链表数据:即,输出1->2->3->5后,原来的两个链表还是1->2->3和2->3->5。因此输出的这些结点都需要重新申请空间存放...
阅读全文
摘要:题目要求: 一串首尾相连的珠子(m个),有N种颜色(N=nLen) Break;}
阅读全文
摘要:第一题: 用天平(只能比较,不能称重)从一堆小球中找出其中唯一一个较轻的,用x次天平,最多可以从y个小球中找出较轻的那个,求y与x的关系式。分析: y = 3^x. 例如:Y= 9. 先分成3堆abc,每堆3个小球; 第一次称找出在abc中哪一堆:称a和b,如果天平不倾斜,...
阅读全文
摘要:题目要求: 有n个长为m+1的字符串,如果某个字符串的最后m个字符与某个字符串的前m个字符匹配,则两个字符串可以联接。 问这n个字符串最多可以连成一个多长的字符串,如果出现死循环,则返回错误。题目分析: 1.每个字符串都是长为m+1的字符串,两个字符串匹配后长度应该为1+m+1=m+2; 2...
阅读全文
摘要:题目要求: n支队伍比赛,分别编号为0,1,2,...,n-1,已知它们之间的实力对比关系存储在一个二维数组w[n][n]中,w[i][j]的值代表编号为i,j的队伍中更强的一支,所以w[i][j] = i或者j. 现在给出它们的出场顺序,并存储在数组order[n]中,比如order[n] =...
阅读全文