随笔分类 -  剑指offer题

摘要:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 阅读全文
posted @ 2017-08-26 12:17 Cloud_strife 阅读(166) 评论(0) 推荐(0)
摘要:题目:在一个mXn的棋盘的每一格放有一个礼物,每个礼物都有一定的价值(价值大于0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向左或者向下移动一格,直到到达棋盘的右下角。给定一个棋盘及其上面的礼物,请计算你最多能拿到多少价值的礼物? 1 10 3 8 12 2 9 6 5 7 4 11 3 7 阅读全文
posted @ 2017-08-16 23:50 Cloud_strife 阅读(212) 评论(1) 推荐(0)
摘要:在网上查了另外一种方法,其实也算同一种。有一些动态规划的思想。代码如下: 参考http://blog.csdn.net/nciaebupt/article/details/8482077 代码。灰常感谢! 阅读全文
posted @ 2017-08-16 20:44 Cloud_strife 阅读(162) 评论(0) 推荐(0)
摘要:HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2} 阅读全文
posted @ 2017-08-16 18:28 Cloud_strife 阅读(200) 评论(0) 推荐(0)
摘要:最小堆 最大堆 实现类 阅读全文
posted @ 2017-08-16 11:27 Cloud_strife 阅读(258) 评论(0) 推荐(0)
摘要:求TOP K数据问题。 一般的思路是,求最小值,用最大堆,求最大值,用最小堆。 拿球最大值来看。用最小堆,先对一个数组的前K个数组进行一个建堆操作,建立最小堆。然后对剩余数组进行选择,如果比堆中最小值的数据大,则替换最小值,然后更新堆,如果比最小值还小,则丢弃。 下面给出代码。我先贴上最小堆的代码。 阅读全文
posted @ 2017-08-16 00:32 Cloud_strife 阅读(154) 评论(1) 推荐(0)
摘要:题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是 阅读全文
posted @ 2017-08-11 23:33 Cloud_strife 阅读(235) 评论(0) 推荐(0)
摘要:定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。 看到这个 题目,第一想法就是,我要不定义一个变量,指向当前栈中最小的值,每次入栈,就和最小值进行比较,如果比最小值小,则最小值指向该值,否则最小值依旧。 但很快遇到问题,如果在出栈时,最小值出来后,比最小值小的值呢?无法查到了啊 阅读全文
posted @ 2017-08-11 22:04 Cloud_strife 阅读(211) 评论(0) 推荐(0)
摘要:判断一颗二叉树,是不是对称的。如果一颗二叉树和它的镜像一样,则它是对称的。 举例如下,该树为对称的。但这个就不是。 对于这个题目。我第一眼想到的办法是,首先我把一棵树转换成它的镜像,然后通过先序,读取镜像树和原始树的数据,并保存在数组中,或者栈中。,然后对着2个数组,或者栈进行匹配。但耗时比较长。书 阅读全文
posted @ 2017-08-10 11:35 Cloud_strife 阅读(166) 评论(0) 推荐(0)
摘要:题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。 输入描述: 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5废话不多说,直接强行上代码。树的创建和打印已经封装好,直接调用。 package 阅读全文
posted @ 2017-08-10 10:50 Cloud_strife 阅读(175) 评论(0) 推荐(0)
摘要:最近在刷剑指offer,里面提到二叉树,一直以来用java的多,所以编写了一个java二叉树结构和工具类。工具类包括创建,遍历等方法。定期更新。 关于输入,假如我的二叉树结构为,则输入的数据为1 2 0 0 3 0 0 。如果为,则输入数据为 1 2 3 0 0 0 4 0 5 0 0 ,其中空格应 阅读全文
posted @ 2017-08-10 10:34 Cloud_strife 阅读(2938) 评论(0) 推荐(0)
摘要:新增一个链表,然后分别采用2个指针指向这两个链表,每次比较链表的值,将较小的那一个存入新链表中。需要主要的是对空链表进行处理,主要还是考察代码的鲁棒性。总共2个链表,数组分别是1,3,5,7,和2, 4, 6,8 采用java进行实现。 阅读全文
posted @ 2017-08-03 10:31 Cloud_strife 阅读(1322) 评论(0) 推荐(0)
摘要:该题目来自剑指offer的面试题16. 输入一个链表,反转链表后,输出链表的所有元素。 思路如下:定义3个指针,分别指向当前结点,头一个结点,下一个结点,然后通过就地逆置即可。 代码就不太解释了。不理解的,可以参考剑指offer的书,上面写得很详细。 阅读全文
posted @ 2017-08-02 20:08 Cloud_strife 阅读(449) 评论(0) 推荐(0)
摘要:题目是剑指offer上的。一种思路是,使用两个指针,第一个指针,走k-1步,之后第二个指针也开始运行,当第一个指针走到链表尾部时,第二个指针所指的位置就是倒数第k个结点。代码如下,略有点乱,思路是清晰的。这里求的是倒数第三个结点。 阅读全文
posted @ 2017-08-02 14:13 Cloud_strife 阅读(276) 评论(1) 推荐(0)
摘要:剑指offer上的题目。题目内容如下: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 简单的,考虑控制2个指针,p1,p2. p1指向首数组,p2指向尾数组。 接着p1,向 阅读全文
posted @ 2017-08-01 20:14 Cloud_strife 阅读(157) 评论(0) 推荐(0)
摘要:链表结构如下: 删除函数如下: void DeleteNode(Nodes head,Nodes target) 很简单的想法就是,要删除该结点,可以把该结点的下一个结点的值赋给该结点,接着删除下一个结点即可。 但要考虑三种情况,一是该结点是尾结点,二是除了头结点以外,只有一个结点,三是只有头结点, 阅读全文
posted @ 2017-08-01 17:07 Cloud_strife 阅读(606) 评论(0) 推荐(0)
摘要:先上第一种 两种方法。第一种,是用位运算,将1每次左移,和数字进行&运算,如果成功,则返回1. 第二种,将整数通过方法转换为二进制数,然后统计其中1的数量 第二种 阅读全文
posted @ 2017-07-23 13:15 Cloud_strife 阅读(4239) 评论(0) 推荐(0)
摘要:剑指offer的第八题。 题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为 阅读全文
posted @ 2017-07-21 14:34 Cloud_strife 阅读(124) 评论(0) 推荐(0)
摘要:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 阅读全文
posted @ 2017-07-20 17:36 Cloud_strife 阅读(814) 评论(0) 推荐(0)
摘要:剑指offer的面试题7.用两个栈来实现队列 #include <stdio.h>#include <string.h> #define MAX 1000typedef struct Stacks{ int date[MAX]; int top;}Stack; Stack stack1,stack2 阅读全文
posted @ 2017-07-20 16:55 Cloud_strife 阅读(728) 评论(0) 推荐(0)