摘要:题目要求: 有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] =...
阅读全文
摘要:题目要求: 求一个矩阵中最大的二维矩阵(元素和最大).如: 1 2 0 3 4 2 3 4 5 1 1 1 5 3 0 中最大的是4 5 5 3. 要求:1)写出算法;2)分析时间复杂度;3)写出相关代码。 参考资料:编程之美 2.15题目分析: 从矩阵开头逐个求2*2矩...
阅读全文
摘要:题目要求: 实现一个队列。队列的应用场景是:一个生产者线程将int型的数入列,一个消费者线程将int型的数出列。 参考资料: 编程之美1.10题目分析: 可以按照操作系统中的生产者与消费者模型来实现代码,大致思路如下:void producer(void){ while(1) { ...
阅读全文
摘要:题目要求: 给一串很长字符串,要求找到符合要求的字符串。 例如目的串:123,则1*****3***2,12*****3这些都要找出来。 其实就是类似一些和谐系统。。。。。。题目分析: 1.假如目的串为:"423",输入长字符串为:"4fsdfk2jfl3fd2jfksd3j4d4d4jkf...
阅读全文
摘要:题目要求: 有两个序列a,b,大小都为n,序列元素的值任意整数,无序; 要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。 参考资料:程序员编程艺术(By July)题目分析: 先求两个序列和之差diff;然后从a和b中分别取一个元素,利用公式:diff-...
阅读全文
摘要:题目要求: 给定 一个十进制正整数N,写下从1开始,到N的所有整数,然后数一下其中出现的所有“1”的个数。 例如:N = 2,写下1,2.这样只出现了1个“1”。 N = 12,我们会写下1,2,3,4,5,6,7,8,9,10,11,12.这样,1的个数是5. 参考资料:编程之美2.4 ...
阅读全文
摘要:题目要求: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1、2、3、4、5是某栈的压栈序列,序列4、5、3、2、1是该压栈序列对应的一个弹出序列,单4、3、5、1、2就不可能是该压栈序列的弹出序列。 参考资料:剑指of...
阅读全文
摘要:题目要求: 输入一个整数,求该整数的二进制表示中有多少个1. 例如输入10,由于其二进制表示作为1010,有两个1,因此输出2. 参考资料:剑指offer第10题、编程之美2.1题目分析: 方法1除2取余法:一个数a%2的值为0或者1,根据是a的二进制表示的最低位为0,则前面结果为0;【取模...
阅读全文
摘要:题目要求: 一个台阶总共有n阶,如果一次可以跳1级,也可以跳2级。求总共有多少种跳法,并分析算法的时间复杂度。题目分析: f(n)=f(n-1)+f(n-2),f(1)=1,f(2)=2;--->f(3)=f(2)+f(1)=2+1;------>f(3)=Fibonacci(4)=Fibona...
阅读全文
摘要:题目要求: 定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。 例如:把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转函数。 参考资料:剑指offer第42题、编程珠玑第二章题目分析: 方法1 临时空间法:将前i个元素先复制到临时空间中,然后将余下的...
阅读全文
摘要:题目要求: 写一个函数,它的原型是int ContinueMax(char *outputStr,char *inputStr); 功能:在字符串中找出连续最长的数字串,并把这个串的长度返回,并把这个最长数字串赋给其中一个函数参数outputStr所指内存。 例如:"abcd12345ed12...
阅读全文
摘要:题目要求: 合并链表。已知链表h1和链表h2都是递增链表,要求合并后也是递增链表。 参考链接:http://blog.csdn.net/v_july_v/article/details/6870251 原链接代码while(h1 != NULL && h2 != NULL)应该修改为while...
阅读全文
摘要:题目要求: 用最简单、最快捷的方法计算出下面这个圆形是否和正方形相交。 3D坐标系原点(0.0,0.0,0.0);圆形:半径 r = 3.0,圆心 o = (*.*,0.0,*.*);正方形:4个角坐标 1:(*.*,0.0,*.*) 2:(*.*,0.0,*.*) 3:(*.*,0.0,*.*...
阅读全文
摘要:题目要求: 有4张红色的牌和4张蓝色的牌,主持人先拿任意两张,再分别在A、B、C三人额头上帖任意两张牌,A、B、C三人都可以看见其余两人额头上的牌,看完后让他们猜自己额头上是什么颜色的牌,A说不知道,B说不知道,C说不知道,然后A说知道了。 请教如何推理,A是怎么知道的。如果用程序,又怎么实现呢...
阅读全文
摘要:题目要求: 输入两个整数n和m,从数列1,2,3.......n中随意取几个数,使其和等于m ,要求将其中所有的可能组合列出来。不能是一个数。题目分析: 0/1背包问题,动态规划代码实现:#include#includeusing namespace std;listlist1;void fin...
阅读全文
摘要:题目要求: 输入一个表示整数的字符串,把该字符串转换成整数并输出。 例如:输入字符串"235",输出整数235. 参考资料:剑指offer第49题、程序员编程艺术 (by July)题目分析: 1.基本思路:int StrToInt(char *str){ int num = 0; ...
阅读全文
摘要:题目要求: 写一个函数,输入n,求斐波拉契数列的第n项。斐波拉契数列的定义如下: 参考资料:剑指offer第9题、编程之美2.9题目分析: 方法1:递归法,效率很低,而且会计算很多重复; 方法2:迭代法,通过保存中间项避免重复计算,时间复杂度O(n); 方法3:公式法,时间复杂度O(1...
阅读全文
摘要:题目要求: 0,1,...,n-1这n个数排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。 例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删词第3个数字,则删除的前四个数字一次是2、0、4、1,因此最后剩下的数字是3. 参考资料:剑...
阅读全文
摘要:题目要求: 在一个字符串中找到第一个只出现一次的字符,如输入abaccdeff,则输出b。 参考资料:剑指offer第35题题目分析: 采用hash表,建立一个256大小的hash空间。需要遍历两次字符串,第一次遍历用来更新hash表,第二次遍历找出第一个只出现一次的字符。代码实现:#incl...
阅读全文
摘要:题目要求: 从上往下打印出二叉树的每个结点,同一层的结点按照从左往右的顺序打印。 例如输入下图的二叉树,则依次打印出10,5,12,4,7 10 / \ 5 12 / \ 4 7 参考资料:剑指offer第23题、编程之美3.10题目分析: 使用一个辅助队...
阅读全文
摘要:题目要求: 输入一颗二元查找树(二元搜索树),将该树转换为它的镜像。 例如: 8 8 / \ ---> / \ 6 11 11 6 参考资料:剑指offer第20题题目分析: 思路很简单:从根结点开始,交换左右结点的值,同时递归的处理左...
阅读全文
摘要:题目要求: 输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,输出任意一对即可。 例如输入数组{1,2,4,7,11,15}和数字15.由于4+11=15,因此输出4和11. 参考资料:剑指offer第41题题目分析: 方法1 穷举法:两...
阅读全文
摘要:题目要求: 输入一个链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。 参考资料:剑指offer第15题题目分析: 1.两个指针,第一个先走k步,然后两个指针同时走,直到第一个走到尾指针,此时第二个指针即为所求; 2.令函数原型为:ListNode *findKthToT...
阅读全文
摘要:题目要求: 要求不能使用乘除法,for/while/if/else/switch/case等关键字以及条件判断语句(A?B:C)。 参考资料:剑指offer第46题题目分析: 方法1:利用类的静态成员变量,定义一次之后该类的所有对象都共享该静态成员变量。再利用构造函数实现n次递加即可; 方法...
阅读全文
摘要:题目要求: 如果我们把二叉树看成一个图,父子结点之间的连线看成是双向的,我们姑且定义“距离”为两节点之间边的个数。写一个程序,求一颗二叉树中距离最远的两个结点之间的距离。 参考资料:编程之美3.8题目分析: 最远距离要么经过根结点,要么不经过根结点在左子树中,要么不经过根结点在右子树中。根据这...
阅读全文
摘要:题目要求: 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。 例如:输入"I am a student.",则输出"student. a am I". 参考资料:剑指offer第42题。题目分析: 1.实现一个翻...
阅读全文
摘要:题目要求: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。 例如输入数组{5,7,6,9,11,10,8},则返回true,因为这个证书序列时某一二叉搜索树的后序遍历结果。如果输入的数组是{7,4,...
阅读全文
摘要:题目1: 有两个房间,一房间里有三盏灯,另一房间里有控制着这三盏灯的三个开关,这两个房间是分割开的,从一间里不能看到另一件的情况。现在要求受训者分别进这两间房一次,然后判断出这三盏灯分别是由哪个开关控制的。 分析:通过温度来解决。题目2: 你让一些人为你工作了七天,你要用一根金条作为报酬。金条...
阅读全文
摘要:题目要求: 给出两个单向链表的头指针,比如h1和h2,判断两个链表是否相交。题目分析: 1.边界检查:是否为NULL 2.是否有环: i).h1和h2都没有环,则如果h1和h2的最后一个结点时同一个结点,则相交; ii).一个有环,一个无环,则肯定不相交; iii).都有环,...
阅读全文
摘要:题目要求: 根据上排给出的十个数,在其下排填出对应的十个数。 要求下排每个数都是先前上排那十个数在下排出现的次数。 例如:上排:0,1,2,3,4,5,6,7,8,9 下排:6,2,1,0,0,0,1,0,0,0 0在下排出现了6次,1在下排出现了2次,2在下排出现了1次,3在下排出...
阅读全文
摘要:题目要求: 输入n个整数,输出其中最小的k个。 例如:输入1,2,3,4,5,6,7,8这8个数字,则最小的4个数字为1,2,3,4。参考资料:剑指offer第30题。题目分析: 解法一: 用快排的思想,但是最小的k个数不用排序,时间复杂度O(n). 优点:时间复杂度好,缺点:会修...
阅读全文
摘要:题目要求: 输入一个整数和一颗二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。 打印出和与输入整数相等的所有路径。 例如输入22,和二叉树如下 10 / \ 5 12 / \ 4 7 则打印出两条路径:10-->12...
阅读全文
摘要:题目要求: 输入一个整型数组,数组里有整数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有个一个和。 求所有子数组的和的最大值。要求时间复杂度为O(n)。 例如:输入的数组为1,-2,3,10,-4,7,2,-5,和最大的子数组为3,10,-4,7,2,因此输出为该子数组的和...
阅读全文
摘要:题目要求:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min、push及pop的时间复杂度都是O(1).参考题目:剑指offer第21题.题目分析: 1.采用面向对象思想,定义类StackWithMin,包含min、push和pop等方法; 2.Stac...
阅读全文
摘要:题目要求:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。参考题目:剑指offer第27题解决思路: 1. 根据观察可知,双向链表顺序即为二叉树的中序遍历结果----->采用中序遍历+递归; 2. 中序遍历顺序为:左+中+右,传入...
阅读全文