自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

原创 LintCode-排序专题总结

排序专题提交记录:排序专题做题感想:刚开始做整数排序的题,想用归并排序和快速排序之类最近学习的排序方法做题,但是不会,写的代码有很多错误而且没有办法改,没办法只能用了符合题目要求的sort 函数,而后面的题相对好做一些,没有用到太多排序方面的算法,用的最多的都是sort 函数,我先做的两数组之和,发现很简单,做完之后想用同样的思路做两数组的交,发现情况不同,每比较一次,就读入了一次相同的元

2017-06-08 17:50:28 298

原创 LintCode-合并区间

题目描述:给出若干闭合区间,合并所有重叠的部分。样例:给出的区间列表 => 合并后的区间列表:[ [ [1, 3], [1, 6], [2, 6], => [8, 10], [8, 10], [15, 18] [15, 18] ]

2017-06-08 16:54:53 488

原创 LintCode-中位数

题目描述:给定一个未排序的整数数组,找到其中位数。中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N/2个数。样例:给出数组[4, 5, 1, 2, 3], 返回 3给出数组[7, 9, 4, 5],返回 5做题思路:先用sort 函数对数组进行升序排序,然后取数组长度,如果能整除2,则为偶数长度数组,取除二的商;如果不能

2017-06-02 20:35:07 407

原创 LintCode-两数组的交

题目描述:返回两个数组的交 注意事项Each element in the result must be unique.The result can be in any order.样例:nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2].做题思路:和“两数组的交2”的思想差不多,但是要加上一

2017-06-02 19:42:38 324

原创 LintCode-两数组的交 II

题目描述:计算两个数组的交 注意事项每个元素出现次数得和在数组里一样答案可以以任意顺序给出样例:nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2, 2].做题思路:先给两个数组进行排序,方便比较,在两个数组长度之内进行比较,如果数值相等,放进新数组中,然后两个数组的下标同时移动,如果不相等

2017-06-02 17:31:25 284

原创 LintCode-两数之和

题目描述:给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标。注意这里下标的范围是 1 到 n,不是以 0 开头。样例:给出 numbers = [2, 7, 11, 15], target = 9, 返回 [1, 2].做题思路:这一题比较简单,就是用

2017-06-02 17:10:18 2949 2

原创 LintCode-整数排序 II

题目描述:给一组整数,按照升序排序。使用归并排序,快速排序,堆排序或者任何其他 的排序算法。样例:给出 [3, 2, 1, 4, 5], 排序后的结果为 [1, 2, 3, 4, 5]。做题思路:这一题同前面一题一样,也是为整数进行升序排序,但不同的是时间复杂度变了,而sort函数不仅符合上一题的要求,更符合这一题的要求,因为sort函数的时间复杂度正好是 O(n 

2017-06-02 17:03:31 195

原创 LintCode-整数排序

题目描述:给一组整数,按照升序排序,使用选择排序,冒泡排序,插入排序或者任何 O(n2) 的排序算法。样例:对于数组 [3, 2, 1, 4, 5], 排序后为:[1, 2, 3, 4, 5]。做题思路:题目要求时间复杂度不超过O(n2)的算法,而sort函数恰好符合要求,从向量数组中的头到尾进行升序排序。关键代码:class Solution {publ

2017-06-02 16:57:18 213

原创 LintCode-二叉查找树专题总结

二叉查找树提交记录:做题感想:在做二叉查找树之前,很久没有在网上做题了,有点生疏,在做第一个题的时候有点问题一直调不过去,自己觉得没有错,一问同学发现了错误之后,才感觉没有做题真的会让熟练度降低。第二题虽然实现的代码很简单,但是想的时间也很长,纠结了很久,也和同学一起讨论了很久,我上网搜了搜答案,有的地方还是捋不清,就让同学把思路顺了一遍,才明白代码是怎样实现的。这个专题虽然只有两

2017-05-18 23:18:17 179

原创 LintCode-Convert BST to Greater Tree

题目描述:Given a Binary Search Tree (BST), convert it to a Greater Tree such that every key of the original BST is changed to the original key plus sum of all keys greater than the original key in BST

2017-05-18 17:52:27 176

原创 LintCode-在二叉查找树中插入节点

题目描述:给定一棵二叉查找树和一个新的树节点,将节点插入到树中。你需要保证该树仍然是一棵二叉查找树。 注意事项You can assume there is no duplicate values in this tree + node.样例:给出如下一棵二叉查找树,在插入节点6之后这棵二叉查找树可以是这样的: 2

2017-05-18 16:52:21 291

原创 LintCode-二叉树专题总结

二叉树提交记录:专题感想:这一专题运用的都是递归函数,让我对递归函数的运用更熟练了,前面的遍历、深度、克隆、等价现在看来都不算难,后面剩的几个题个人认为挺有难度的,越做到后面做题的时间越长,甚至有的题没有思路,研究的时间比较长,对递归函数的运用的要求也越来越高,有的题网上搜了答案,看懂了之后觉得不难,但就是自己想不出来,还有和数组链表相结合的题,一点点的增加难度,挺有意思的,了解了更多

2017-04-20 15:17:23 217

原创 LintCode-子树

题目描述:有两个不同大小的二进制树: T1 有上百万的节点; T2 有好几百的节点。请设计一种算法,判定 T2 是否为 T1的子树。 注意事项若 T1 中存在从节点 n 开始的子树与 T2 相同,我们称 T2 是 T1 的子树。也就是说,如果在 T1 节点 n 处将树砍断,砍断的部分将与 T2 完全相同。样例:下面的例子中 T2 是 T1 的

2017-04-20 15:02:18 189

原创 LintCode-把排序数组转换为高度最小的二叉搜索树

题目描述:给一个排序数组(从小到大),将其转换为一棵高度最小的排序二叉树。 注意事项There may exist multiple valid solutions, return any of them.样例:给出数组 [1,2,3,4,5,6,7], 返回 4 / \ 2 6 / \ / \1

2017-04-20 12:35:06 466

原创 LintCode-二叉树拆成链表

题目描述:将一棵二叉树按照前序遍历拆解成为一个假链表。所谓的假链表是说,用二叉树的right 指针,来表示链表中的 next 指针。 注意事项不要忘记将左儿子标记为 null,否则你可能会得到空间溢出或是时间溢出。样例: 1 \ 1 2 / \

2017-04-16 21:22:27 336

原创 LintCode-二叉树的所有路径

题目描述:给一棵二叉树,找出从根节点到叶子节点的所有路径。样例:给出下面这棵二叉树: 1 / \2 3 \ 5所有根到叶子的路径为:[ "1->2->5", "1->3"]做题思路:题目要求在输出时,数组中输出的是一串路径,所以,在类内调用已写的递归函数,对递归函数进行编写:定义树的结点、数组对象和字符串。如

2017-04-15 09:22:01 199

原创 LintCode-翻转二叉树

题目描述:翻转一棵二叉树样例: 1 1 / \ / \2 3 => 3 2 / \ 4 4做题思路:用递归遍历左右子树,用swap交换结点的值。关键代码:class Solution {public: /** * @param root: a TreeNode, the

2017-04-09 00:06:27 184

原创 LintCode-二叉树的最大节点

题目描述:在二叉树中寻找值最大的节点并返回。样例:给出如下一棵二叉树: 1 / \ -5 2 / \ / \0 3 -4 -5 返回值为 3 的节点。做题思路:创建两个树结点,先赋初值,把根结点赋给它们,在考虑左子树和右子树不为空的情况下,用递归函数遍历左子树和右子树,赋给创建的left和right,再比较left和ro

2017-04-08 23:47:00 4074

原创 LintCode-克隆二叉树

题目描述:深度复制一个二叉树。给定一个二叉树,返回一个他的 克隆品 。样例:给定一个二叉树: 1 / \ 2 3 / \4 5返回其相同结构相同数值的克隆二叉树: 1 / \ 2 3 / \4 5做题思路:创建一个新的根节点,把原来的根节点的值赋给新的根结点,利用递

2017-04-08 21:13:33 252

原创 LintCode-等价二叉树

题目描述:检查两棵二叉树是否等价。等价的意思是说,首先两棵二叉树必须拥有相同的结构,并且每个对应位置上的节点上的数都相等。样例: 1 1 / \ / \ 2 2 and 2 2 / /4 4就是两棵等价的二叉树。 1

2017-04-08 19:30:37 584

原创 LintCode-二叉树的最小深度

题目描述:给定一个二叉树,找出其最小深度。二叉树的最小深度为根节点到最近叶子节点的距离。样例:给出一棵如下的二叉树:        1     /     \    2       3          /    \        4      5  这个二叉树的最小深度为 2做题思路:如果根结点为空,返回0,若左子树

2017-04-07 23:11:36 232

原创 LintCode-二叉树的最大深度

题目描述:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的距离。样例:给出一棵如下的二叉树: 1 / \ 2 3 / \ 4 5这个二叉树的最大深度为3.做题思路:如果根节点为空,返回0,用递归,一直遍历左子树,然后遍历右子树,然后直到遍历到空,由于递归的性质,再返回,返回的过程中一层一层

2017-04-07 22:54:22 283

原创 LintCode-二叉树的层次遍历

题目描述:给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)样例:给一棵二叉树 {3,9,20,#,#,15,7} : 3 / \9 20 / \ 15 7返回他的分层遍历结果:[ [3], [9,20], [15,7]]做题思路:创建队列,把根节点放入队列,建立一个length用来记录队列长度,把树的结点指针

2017-04-07 20:35:12 177

原创 LintCode-二叉树的后序遍历

题目描述:给出一棵二叉树,返回其节点值的后序遍历。样例:给出一棵二叉树 {1,#,2,3}, 1 \ 2 / 3返回 [3,2,1]做题思路:运用递归,先遍历左子树,再遍历右子树,最后遍历根,存入数组,返回数组。关键代码:class Solution {    /**     * @param root

2017-04-07 20:33:35 156

原创 LintCode-二叉树的中序遍历

题目描述:给出一棵二叉树,返回其中序遍历样例:给出二叉树 {1,#,2,3}, 1 \ 2 / 3返回 [1,3,2].做题思路:递归算法,先遍历左子树,在看根节点,再遍历右子树,遍历后的结点放进数组中,返回数组。关键代码:class Solution {    /**     * @param root:

2017-04-07 20:29:08 157

原创 LintCode-二叉树的前序遍历

题目描述:给出一棵二叉树,返回其节点值的前序遍历。样例:给出一棵二叉树 {1,#,2,3},   1    \     2    /   3 返回 [1,2,3]做题思路:用递归算法,从根节点开始,先遍历左子树再遍历右子树,存放在数组中。关键代码:class Solution {public:    /**     * @pa

2017-04-07 20:11:21 142

原创 LintCode-链表专题总结

专业总结:刚开始让我们做题的时候我的内心是拒绝的,因为觉得上课讲的东西并没有完全的懂就开始做题,肯定不会。但是老师在ppt里面放了几个链表的题,对着这几个题一个一个画图的看,最后弄懂了,剩下的几个题中有比较简单的,错几遍改一改就可以accepted了,后面觉得有点难度的题是最后剩的两个题,一个是合并链表,还有一个是链表求和。让我改的次数最多的就是合并链表,我觉得自己写的没问题,却一直越界,一直没找

2017-03-30 00:04:38 302

原创 LintCode-链表划分

题目描述:给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。你应该保留两部分内链表节点原有的相对顺序。样例给定链表 1->4->3->2->5->2->null,并且 x=3返回 1->2->2->4->3->5->null做题思路:先找到比给定的val大和小的结点,找到之后,比给定值小的划分到leftdummy的后面,比给定值大的结点划分到righ

2017-03-29 23:59:52 1151

原创 LintCode-链表插入排序

用插入排序对链表排序样例Given 1->3->2->0->null, return 0->1->2->3->null解题思路:用temp移动,指向head指向的下一个结点。用while循环判断指针指向的下一个地址不为空,如果新建的链表指向的结点的值小于原链表指向的结点的值,就向下移动,head指向的结点断链,把该结点放在node的那个链表后面,head再指向下一个结点,temp指向h

2017-03-29 23:53:10 1482

原创 LintCode-链表求和

题目描述:你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。样例给出两个链表 3->1->5->null 和 5->9->2->null,返回 8->0->8->null做题思路:用while循环进行相加、取模、进位,为进位的数开辟一个新的结点。然后把相加的数放进新创建的结

2017-03-29 23:13:46 427

原创 LintCode-删除链表中的元素

题目描述:删除链表中等于给定值val的所有节点。样例给出链表 1->2->3->3->4->5->3, 和 val = 3, 你需要返回删除3之后的链表:1->2->4->5。做题思路:用指针指向结点,从开始结点一个一个找,如果该结点的值等于输入的值,那么对该结点进行覆盖。关键代码: ListNode *removeElements(ListNode *head, int val)

2017-03-29 12:17:43 206

原创 LintCode-合并两个排序链表

题目描述:将两个排序链表合并为一个新的排序链表样例给出 1->3->8->11->15->null,2->null,返回 1->2->3->8->11->15->null。做题思路:用两个头结点l1和l2遍历两个链表,比较结点值的大小,小的那个进入新的链表,新链表定义一个头结点,指向的结点放入值以后,挪动到下一个结点,要额外考虑刚开始链表就为空,和遍历中有一个链表提前到达空的情况。

2017-03-29 12:16:07 1101 1

原创 LintCode-两两交换链表中的节点

题目描述:给一个链表,两两交换其中的节点,然后返回交换后的链表。样例给出 1->2->3->4, 你应该返回的链表是 2->1->4->3做题思路:找一个中间变量d,把一个结点的值存储起来,再进行结点之间值的交换。关键代码:ListNode* swapPairs(ListNode *head) {       // Write your code here       in

2017-03-28 00:44:44 206 1

原创 LintCode-删除链表中倒数第n个节点

题目描述:给定一个链表,删除链表中倒数第n个节点,返回链表的头节点。样例给出链表1->2->3->4->5->null和 n = 2.删除倒数第二个节点之后,这个链表将变成1->2->3->5->null.做题思路:找到第n个结点之后,删除该结点,此题运用了之前找到倒数第n个结点的部分代码。关键代码:ListNode *removeNthFromEnd(ListNode *he

2017-03-28 00:43:13 211

原创 LintCode-删除排序链表中的重复元素

题目描述:给定一个排序链表,删除所有重复的元素每个元素只留下一个。解题思路:用p作为移动的指针,来判断该指针指向的数据和下一结点的数据是否一样,不一样则指向下一结点,一样的话就用覆盖的方法,删除该结点,直至指向空结点或下一结点为空。样例给出 1->1->2->null,返回 1->2->null给出 1->1->2->3->3->null,返回 1->2->3->null关键代

2017-03-28 00:38:41 219

原创 LintCode-链表倒数第n个节点

题目描述:找到单链表倒数第n个节点,保证链表中节点的最少数量为n。样例给出链表 3->2->1->5->null和n = 2,返回倒数第二个节点的值1.做题思路:利用两个头结点移动,P先走n-1个结点,之后p走一个,q就走一个,知道p指向空时,q就指向了倒数第n个结点。关键代码:ListNode *nthToLast(ListNode *head, int n){

2017-03-28 00:37:16 187

原创 LintCode-翻转一个链表

样例:给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null解题思路:先设置一个空结点prev,用它作为中间变量。而设置的temp是一个可移动的指针,用它来完成循环后的挪到下一结点。循环第一次,把开始结点变成了尾结点,循环第二次,把temp指向了下一个结点,把下一结点的指针指向了上一结点,完成新的链接,以此类推,直到指向了空,循环结束。完成了链表翻转。关键代码

2017-03-27 23:01:29 322

原创 LintCode-在O(1)时间复杂度删除链表节点

题目描述:.给定一个单链表中的一个等待被删除的节点(非表头或表尾)。请在在O(1)时间复杂度删除该链表节点。样例给定 1->2->3->4,和节点 3,删除 3 之后,链表应该变为1->2->4。解题思路:先赋值后改变地址,先把该节点的下一个结点的数据赋值给该结点,然后再把指针指向下下个结点的地址,完成这两步之后,该结点就被下一结点覆盖了,完成了删除该结点的任务。关键代码:

2017-03-27 22:57:19 201

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除