![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指offer
文章平均质量分 78
小熊熊-光头强
这个作者很懒,什么都没留下…
展开
-
二维数组中的查找
题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。输入: 输入可能包含多个测试样例,对于每个测试案例,输入的第一行为两个整数m和n(1输入的第二行包括一个整数t(1接下来的m行,每行有n个数,代表题目所给出的m行n列的矩阵(矩阵如题目描述所示,原创 2014-07-24 13:06:52 · 471 阅读 · 0 评论 -
包含min函数的栈
题目描述:定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。输入:输入可能包含多个测试样例,输入以EOF结束。对于每个测试案例,输入的第一行为一个整数n(1接下来有n行,每行开始有一个字母Ci。Ci=’s’时,接下有一个数字k,代表将k压入栈。Ci=’o’时,弹出栈顶元素。输出:对应每个测试原创 2014-08-07 22:07:07 · 379 阅读 · 0 评论 -
从上往下打印二叉树
题目描述:从上往下打印出二叉树的每个节点,同层节点从左至右打印。输入:输入可能包含多个测试样例,输入以EOF结束。对于每个测试案例,输入的第一行一个整数n(1Ci=’d’表示第i个节点有两子孩子,紧接着是左孩子编号和右孩子编号。Ci=’l’表示第i个节点有一个左孩子,紧接着是左孩子的编号。Ci=’r’表示第i个节点有一个右孩子,紧接着是右孩子原创 2014-08-08 23:21:20 · 369 阅读 · 0 评论 -
二叉搜素树的后续遍历
题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。输入:每个测试案例包括2行:第一行为1个整数n(1第二行包含n个整数,表示这个数组,数组中的数的范围是[0,100000000]。输出:对应每个测试案例,如果输入数组是某二叉搜索树的后序遍历的结果输出Yes,否则输出原创 2014-08-09 23:56:40 · 439 阅读 · 0 评论 -
二叉树中和为某一值的路径
题目描述:输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。输入:每个测试案例包括n+1行:第一行为2个整数n,k(1接下来有n行。这n行中每行为3个整数vi,leftnode,rightnode,vi表示第i个结点的值,leftnode表示第i个结点的左孩子结点编号,rightnod原创 2014-08-09 23:59:16 · 364 阅读 · 0 评论 -
复杂链表的复制
题目:实现函数complextListNode* clone(ComplexListNoe* )原创 2014-08-10 23:38:14 · 325 阅读 · 0 评论 -
二叉搜素树与双向链表
题目: 输入一颗二叉搜素树,将该树转换成一个排序的双向链表.要求不能创建新的结点,只能 调整树中结点指针的指向.思想: 10 / \ 6 4---------------->4==6==8==10==12==14==16 /\ /\ 4 8 12 16 我们可以中序遍历整棵树。按照这个方式遍历树,比较小的结点先访问。 如果我们每访问一个原创 2014-08-11 21:33:56 · 368 阅读 · 0 评论 -
字符串的排列
题目: 输入一个字符串,打印出该字符串中字符的所有排列思想: 把一个字符串看成是两部分组成:第一部分为他的第一个字符,第二部分为后面所有的字符 首先求所有可能出现在第一个位置的字符,即把第一个字符和后面所有的字符交换. 然后固定第一个字符,求后面所有字符的排列,仍把后面的所有字符分成两部分:后面字符 的第一个字符,以及这个字符后面的所有字符 最后把第一个字符逐一和后面的原创 2014-08-11 21:17:37 · 359 阅读 · 0 评论 -
数组中数过一半的数字
#include#includevoid swap(int* data1,int* data2){ int temp=*data1; *data1=*data2; *data2=temp;}int partition(int data[],int length,int start,int end){ if(data==NULL||length=len原创 2014-08-13 20:55:03 · 484 阅读 · 0 评论 -
字符串的组合
转自:http://blog.csdn.net/ns_code/article/details/26405471转载 2014-08-12 21:11:56 · 328 阅读 · 0 评论 -
第一次只出现一次的字符
题目:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。分析:这道题是2006年google的一道笔试题。看到这道题时,最直观的想法是从头开始扫描这个字符串中的每个字符。当访问到某字符时拿这个字符和后面的每个字符相比较,如果在后面没有发现重复的字符,则该字符就是只出现一次的字符。如果字符串有n个字符,每个字符可能与后面的O(n)个字符相比较,因此这种思路时间复杂原创 2014-09-10 22:23:06 · 389 阅读 · 0 评论 -
连续子数组的最大和
题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。分析:本题最初为2005年浙江大学计算机系的考研题的最后一道程序设计题,原创 2014-08-14 21:04:22 · 411 阅读 · 0 评论 -
数组中组成最小的数
题目:输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。例如输入数组{32, 321},则输出这两个能排成的最小数字32132。请给出解决问题的算法,并证明该算法。分析:这是09年6月份百度新鲜出炉的一道面试题,从这道题我们可以看出百度对应聘者在算法方面有很高的要求。这道题其实是希望我们能找到一个排序规则,根据这个规则排出来的数组能排成一个最小的数字。要确定原创 2014-08-16 22:27:07 · 1936 阅读 · 0 评论 -
丑数
题目:我们把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第1500个丑数。思路原创 2014-08-17 20:46:51 · 427 阅读 · 0 评论 -
栈的输入和弹出序列
题目描述:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。输入:每个测试案例包括3行:第一行为1个整数n(1第二行包含n个整数,表示栈的压入顺序。第三行包含原创 2014-08-07 22:10:20 · 1138 阅读 · 0 评论 -
二叉树的镜像
题目:原创 2014-08-07 12:32:20 · 304 阅读 · 0 评论 -
替换空格
题目描述: 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。输入: 每个输入文件仅包含一组测试样例。对于每组测试案例,输入一行代表要处理的字符串。输出: 对应每个测试案例,出经过处理后的字符串。样例输入: We Are Happy样例输出:原创 2014-07-24 15:00:26 · 299 阅读 · 0 评论 -
从尾到头打印链表
题目描述:输入一个链表,从尾到头打印链表每个节点的值。输入:每个输入文件仅包含一组测试样例。每一组测试案例包含多行,每行一个大于0的整数,代表一个链表的节点。第一行是链表第一个节点的值,依次类推。当输入到-1时代表链表输入完毕。-1本身不属于链表。输出:对应每个测试案例,以从尾到头的顺序输出链表每个节点的值,每个值占一行。样例输入:原创 2014-07-24 17:12:39 · 328 阅读 · 0 评论 -
重构二叉树
题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并输出它的后序遍历序列。输入:输入可能包含多个测试样例,对于每个测试案例,输入的第一行为一个整数n(1输入的第二行包括n个整数(其中每原创 2014-07-25 20:05:07 · 579 阅读 · 0 评论 -
两个栈实现队列
题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作。队列中的元素为int类型。输入:每个输入文件包含一个测试样例。对于每个测试样例,第一行输入一个n(1接下来的n行,每行输入一个队列操作:1. PUSH X 向队列中push一个整数x(x>=0)2. POP 从队列中pop一个数。输出:对应每个测试案例,打印所有po原创 2014-07-25 21:15:06 · 406 阅读 · 0 评论 -
旋转数组的最小值
题目描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。输入:输入可能包含多个测试样例,对于每个测试案例,输入的第一行为一个整数n(1输入的第二行包括n个整数,其中每个整数a的范围是(1输出:对应每个原创 2014-07-26 22:09:12 · 360 阅读 · 0 评论 -
在O(1时间删除链表节点
在O(1)时间删除链表的节点 题目: 给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间删除该节点, 我们要删除一个节点i,先把i的下一个节点j的内容复制到i,然后把i 的指针指向节点j的下一个节点。此时再删除节点 j,其效果就是把节点i给删除了 。原创 2014-08-02 22:39:07 · 398 阅读 · 0 评论 -
调整数组顺序使奇数位于偶数前面
题目: 输入一个证书数组,实现一个函数来调整该数组中原创 2014-08-03 23:37:13 · 337 阅读 · 0 评论 -
链表中的倒数第k个节点
题目描述:输入一个链表,输出该链表中倒数第k个结点。(hint: 请务必使用链表。)输入:输入可能包含多个测试样例,输入以EOF结束。对于每个测试案例,输入的第一行为两个整数n和k(0输入的第二行包括n个数t(1输出:对应每个测试案例,若有结果,输出相应的查找结果。否则,输出NULL。样原创 2014-08-03 22:42:56 · 322 阅读 · 0 评论 -
合并两个有序链表后组成一个更大一个有序链表
题目描述:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。(hint: 请务必使用链表。)输入:输入可能包含多个测试样例,输入以EOF结束。对于每个测试案例,输入的第一行为两个整数n和m(0下面一行包括n个数t(1输出:对应每个测试案例,若有结果,输出相应的链表。否则原创 2014-08-04 21:40:56 · 468 阅读 · 0 评论 -
二进制中1的个数
题目描述:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。输入:输入可能包含多个测试样例。对于每个输入文件,第一行输入一个整数T,代表测试样例的数量。对于每个测试样例输入为一个整数。。n保证是int范围内的一个整数。输出:对应每个测试案例,输出一个整数,代表输入的那个数中1的个数。原创 2014-07-30 11:23:38 · 284 阅读 · 0 评论 -
二叉树的子结构
题目:原创 2014-08-05 23:47:49 · 335 阅读 · 0 评论 -
数值的整数幂
题目描述:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。输入:输入可能包含多个测试样例。对于每个输入文件,第一行输入一个整数T,表示测试案例的数目,接下来的T行每行输入一个浮点数base和一个整数exponent,两个数中间用一个空格隔开。输出:对应每个测试案原创 2014-07-30 21:31:34 · 433 阅读 · 0 评论 -
顺时针打印矩阵
题目描述:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵:1 2 3 45 6 7 89 10 11 1213 14 15 16则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.输入:输入可能包含多个测试样例,对于每个测试案例,输入的第一行包括两个整数m和n(1接下来的m行原创 2014-08-07 12:36:27 · 289 阅读 · 0 评论 -
数组中出现的逆序对
题目描述:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。输入:每个测试案例包括两行:第一行包含一个整数n,表示数组中的元素个数。其中1 第二行包含n个整数,每个数组均为int类型。输出:对应每个测试案例,输出一个整数,表示数组中的逆序对的总数。样例输入:7 5 6 4样例输出:原创 2014-09-13 23:48:38 · 366 阅读 · 0 评论