- 博客(39)
- 收藏
- 关注
原创 Lintcode——排序专题总结
这个专题的题目主要考察对排序的适当应用,很多算法问题在解决的时候也许很困难,但是利用排序先对要操作的元素进行排序,后续的操作就会简单很多。整数排序的两个题目本应该运用排序的其他算法来写,但是挣扎了半天写出来依旧不对,最后只能是用了sort()函数…… 整个专题里花费了一些时间的就属“两数组的交”和“合并区间”了!“两数组的交”卡在了在处理不重复添加上,“合并区间”卡在了如果不止两
2017-06-09 09:10:06
400
原创 Lintcode——合并区间
1.题目 给出若干闭合区间,合并所有重叠的部分。样例 给出的区间列表 => 合并后的区间列表:[ [ [1, 3], [1, 6], [2, 6], => [8, 10], [8, 10], [15, 18] [15, 18]
2017-06-09 08:26:49
471
原创 Lintcode——链表插入排序
1.题目 用插入排序对链表排序 Given 1->3->2->0->null, return 0->1->2->3->null2.思路 第一遍循环时不进行while循环,开始将原链表头节点断开尾插到新建链表中,原链表头指针下移到第二个元素。 从第二遍循环开始,将新旧链表中元素开始比较大小 ①若旧链表中现在的头节点值小于新链表
2017-06-02 19:31:30
520
原创 Lintcode——两数之和
1.题目 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。 你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标。注意这里下标的范围是 1 到 n,不是以0 开头。注意事项 你可以假设只有一组答案。样例 给出 numbers = [2, 7, 11, 15], target = 9, 返回 [1,
2017-06-02 19:19:59
394
原创 Lintcode——两数组的交 II
1.题目 计算两个数组的交 注意事项 每个元素出现次数得和在数组里一样 答案可以以任意顺序给出样例 nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2, 2].2.思路 首先对两个数组分别排序; 然后从头开始遍历比对两个数组(当1数组的i位小于2数组的j位时,可以直接下
2017-06-02 19:06:32
362
原创 Lintcode——两数组的交
1.返回两个数组的交注意事项 Each element in the result must be unique.The result can be in any order.您在真实的面试中是否遇到过这个题?Yes哪家公司问你的这个题? Airbnb Alibaba Amazon Apple Baidu Bloomberg
2017-06-02 18:13:16
336
原创 Lintcode——整数排序 II
1.题目 给一组整数,按照升序排序。使用归并排序,快速排序,堆排序或者任何其他 O(n log n) 的排序算法。哪家公司问你的这个题? Airbnb Alibaba Amazon Apple Baidu Bloomberg Cisco Dropbox Ebay Facebook Google Hulu Intel Linkedin
2017-06-02 18:05:11
312
原创 Lintcode——整数排序
1.题目 给一组整数,按照升序排序,使用选择排序,冒泡排序,插入排序或者任何 O(n2) 的排序算法。哪家公司问你的这个题? Airbnb Alibaba Amazon Apple Baidu Bloomberg Cisco Dropbox Ebay Facebook Google Hulu Intel Linkedin Microsoft
2017-06-02 17:57:45
391
原创 Lintcode——中位数
1.题目 给定一个未排序的整数数组,找到其中位数。 中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N/2个数。样例 给出数组[4, 5, 1, 2, 3], 返回 3 给出数组[7, 9, 4, 5],返回 52.思路 对数组进行排序,再取排在中间位置的数。 注意
2017-06-02 17:38:39
355
原创 lintcode——Convert BST to Greater Tree
1.题目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 18:00:48
364
原创 lintcode——在二叉查找树中插入节点
1.题目 给定一棵二叉查找树和一个新的树节点,将节点插入到树中。 你需要保证该树仍然是一棵二叉查找树。注意事项You can assume there is no duplicate values in this tree + node.样例给出如下一棵二叉查找树,在插入节点6之后这棵二叉查找树可以是这样的: 2
2017-05-18 17:01:27
398
原创 lintcode——二叉树总结
在这个专题里对二叉树遍历的几道题最基础的东西了,后面的题目基本上都是在遍历的基础上进行一些数据的保存、判断、划分等操作。 不得不说对于二叉树的问题,递归是最好用的了!!!以前学习递归的的时候也没怎么应用,感觉理解的不是很透彻,通过做这个专题的题目,自己也搜了很多关于递归的定义理解的东西加深了对递归算法的了解:递归算法解决问题的特点:(1) 递归就是在过程
2017-04-21 19:06:15
324
原创 lintcode——子树
1、题目 有两个不同大小的二进制树: T1 有上百万的节点; T2 有好几百的节点。请设计一种算法,判定 T2 是否为 T1的子树。注意事项若 T1 中存在从节点 n 开始的子树与 T2 相同,我们称 T2 是 T1 的子树。也就是说,如果在 T1 节点 n 处将树砍断,砍断的部分将与 T2 完全相同。样例 下面的例子中 T2 是 T1 的子树:
2017-04-20 18:14:36
266
原创 lintcode——二叉树的所有路径
1、题目 给一棵二叉树,找出从根节点到叶子节点的所有路径哪家公司问你的这个题? Airbnb Alibaba Amazon Apple Baidu Bloomberg Cisco Dropbox Ebay Facebook Google Hulu Intel Linkedin Microsoft NetEase Nvidia Orac
2017-04-13 23:27:50
348
原创 lintcode——把排序数组转换为高度最小的二叉搜索树
1、题目 给一个排序数组(从小到大),将其转换为一棵高度最小的排序二叉树。 注意事项 There may exist multiple valid solutions, return any of them.样例 给出数组 [1,2,3,4,5,6,7], 返回 4 / \ 2 6 / \ / \1 3
2017-04-12 20:10:39
926
原创 lintcode——将二叉树拆成链表
1、题目 将一棵二叉树按照前序遍历拆解成为一个假链表。所谓的假链表是说,用二叉树的 right 指针,来表示链表中的next 指针。注意事项不要忘记将左儿子标记为 null,否则你可能会得到空间溢出或是时间溢出。样例 1 \ 1 2 / \ \
2017-04-11 18:16:28
334
原创 lintcode——等价二叉树
1、题目2、思路 对两课二叉树从以下几种情况考虑: ① 两个均空,true; ②一个空另一个不空,false; ③两个不空: (对两棵树递归,依次比较每一层的左右子树) 子树节点值完全一样,true; 子树节点值不完全一样,false;3、代码/**
2017-04-09 15:28:20
478
原创 lintcode——翻转二叉树
1、题目 翻转一棵二叉树哪家公司问你的这个题? Airbnb Alibaba Amazon Apple Baidu Bloomberg Cisco Dropbox Ebay Facebook Google Hulu Intel Linkedin Microsoft NetEase Nvidia Oracle Pinterest Sna
2017-04-09 15:04:04
432
原创 lintcode——二叉树的最大节点
1、问题 在二叉树中寻找值最大的节点并返回。哪家公司问你的这个题?AirbnbAlibaba Amazon Apple Baidu Bloomberg Cisco Dropbox Ebay Facebook Google Hulu Intel Linkedin Microsoft NetEase Nvidia Oracle
2017-04-09 12:23:09
1871
原创 lintcode——克隆二叉树
1、题目 深度复制一个二叉树。 给定一个二叉树,返回一个他的 克隆品 。哪家公司问你的这个题? Airbnb Alibaba Amazon Apple Baidu Bloomberg Cisco Dropbox Ebay Facebook Google Hulu Intel Linkedin Microsoft NetEase Nvi
2017-04-09 00:04:19
595
原创 lintcode——二叉树的后序遍历
1、题目 给出一棵二叉树,返回其节点值的后序遍历。哪家公司问你的这个题? Airbnb Alibaba Amazon Apple Baidu Bloomberg Cisco Dropbox Ebay Facebook Google Hulu Intel Linkedin Microsoft NetEase Nvidia Oracle Pint
2017-04-08 00:52:41
325
原创 lintcode——二叉树的层次遍历
1、题目 给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)样例 给一棵二叉树 {3,9,20,#,#,15,7} : 3 / \9 20 / \ 15 7返回他的分层遍历结果:[ [3], [9,20], [15,7]]2、思路 层次遍历比前、中、后序遍历多了一些要处理的问题,比如:如何将每一
2017-04-08 00:36:07
342
原创 lintcode——二叉树的中序遍历
1、题目 给出一棵二叉树,返回其中序遍历样例 给出二叉树 {1,#,2,3}, 1 \ 2 / 3返回 [1,3,2].2、思路 和前序遍历是一样的,用递归算法。不过是中间遍历根节点了·~~~~3、代码/** * Definition of TreeNode: * class TreeNode {
2017-04-08 00:30:40
286
原创 lintcode——二叉树的前序遍历
1、题目 给出一棵二叉树,返回其节点值的前序遍历。样例 给出一棵二叉树 {1,#,2,3}, 1 \ 2 / 3 返回 [1,2,3].2、思路 用递归前序遍历。 递归遍历左子树,再遍历根节点,最后遍历右子树。每一次回溯把当前根节点添进向量。3、代码/** * Definition of T
2017-04-08 00:18:08
1488
原创 lintcode——二叉树的最小深度
1.题目 给定一个二叉树,找出其最小深度。 二叉树的最小深度为根节点到最近叶子节点的距离。样例 给出一棵如下的二叉树: 1 / \ 2 3 / \ 4 5 这个二叉树的最小深度为 22.思路 先考虑空树,返回0;
2017-04-07 23:59:24
296
原创 lintcode——二叉树的最大深度
1.题目 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的距离。样例 给出一棵如下的二叉树: 1 / \ 2 3 / \ 4 5这个二叉树的最大深度为3.2.思路 用递归算法。感觉是和遍历一样,只不过要进行计数。 先遍历右子树直到叶子结点,此时返回0,在归的过程中
2017-04-07 21:48:34
310
原创 lintcode——链表总结
在链表这组题目中,很多题目是有很多相同点的,我从一开始没有一点头绪,最后慢慢有了思路也知道该怎么进行操作,开心~~~~~比如,返回倒数第n个节点的值和删除倒数第n个节点基本是一样的,这道题目在找倒数第n个节点的前一个时非常巧妙,一前一后的指针前进,利用两个指针的中间差值找到倒数第n个,我觉得特别有意思~~~ 做题的过程中也和同学交流了很多,其实一个题目有很多做法都可以通过,我觉得在
2017-03-30 00:04:58
720
原创 lintcode——合并两个排序链表
1.题目 将两个排序链表合并为一个新的排序链表 给出 1->3->8->11->15->null,2->null, 返回1->2->3->8->11->15->null。2.思路 新建一个链表,对给定的两个链表从头遍历并比较大小,每次将较小(3.代码/** * Definition of ListNode * class ListNode
2017-03-29 23:21:37
878
原创 lintcode——删除排序链表中的重复元素
1.题目 给定一个排序链表,删除所有重复的元素每个元素只留下一个。 给出 1->1->2->null,返回 1->2->null 给出 1->1->2->3->3->null,返回 1->2->3->null2.思路 删除重复元素的思路和之前所有的删除都是一样的。 链表为空直接返回。当链表不为空时从头开始遍历,当遍历到某值
2017-03-29 00:11:18
299
原创 lintcode——链表插入排序
1.题目 用插入排序对链表排序 Given 1->3->2->0->null, return 0->1->2->3->null2.思路 第一遍循环时不进行while循环,开始将原链表头节点断开尾插到新建链表中,原链表头指针下移到第二个元素。 从第二遍循环开始,将新旧链表中元素开始比较大小 ①若旧链表中现在的头节点值小于新链表
2017-03-29 00:08:47
482
原创 lintcode——链表求和
1.题目 你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。 给出两个链表 3->1->5->null 和 5->9->2->null,返回8->0->8->null2.思路 考虑如何实现进位、和数的每一位如何得到、当链表l1与l2不一样长
2017-03-28 23:37:20
487
原创 lintcode——链表划分
1.题目 给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。 你应该保留两部分内链表节点原有的相对顺序。 给定链表 1->4->3->2->5->2->null,并且 x=3 返回 1->2->2->4->3->5->null2.思路思路 新建两个链表,对两个新链表尾插。在旧链表里从头开始遍历,当遍历到
2017-03-26 23:51:27
507
原创 lintcode——删除链表中的元素
1.题目 删除链表中等于给定值val的所有节点。 给出链表1->2->3->3->4->5->3, 和 val = 3, 你需要返回删除3之后的链表:1->2->4->5。2.思路这个题的删除和用O(1)复杂度删除节点是一样的。首先重新接入一个新的节点,然后让旧头结点head依次下移查找其下个的值是否等于val,如果等于val则用下下个覆盖下个,这样就完成
2017-03-26 23:46:18
369
原创 lintcode——翻转链表
1.题目 给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null2.思路 利用头插法。新建一个链表,把现有链表中节点依次头插到新链表中,每一次头插前,T作为旧链表中临时的一个头。在新链表中,每一次dummy=head代表dummy从尾依次走到头,最后返回dummy时,整个链表就是原来链表的逆序。3.代码 /**
2017-03-26 23:41:45
283
原创 lintcode——链表倒数第n个节点
1.题目 找到单链表倒数第n个节点,保证链表中节点的最少数量为n。 给出链表 3->2->1->5->null和n = 2,返回倒数第二个节点的值1.2.思路: 这道题和上一道删除倒数第n个节点一模一样啊~~ 注意:返回值的时候只需要返回指针(别人告诉我是因为定义类的时候带了* 号 ——!) 思路是复制过来的:)头指针处第一
2017-03-26 23:37:03
413
原创 lintcode——删除链表中倒数第n个节点
1.题目 给定一个链表,删除链表中倒数第n个节点,返回链表的头节点。 给出链表1->2->3->4->5->null和 n = 2. 删除倒数第二个节点之后,这个链表将变成1->2->3->5->null.2.思路这道题的关键就在于如何找到倒数第n个节点的前一个节点!创建两个指针放在头指针处,第一个指针fast下移n-1次后开始判断链表是否只有n
2017-03-26 23:31:37
355
原创 lintcode——两两交换链表中的节点
1.题目 给一个链表,两两交换其中的节点,然后返回交换后的链表。 给出1->2->3->4, 你应该返回的链表是 2->1->4->3。2.思路 一开始看到这个题就在纠结到底是两两交换节点还是只交换值,因为觉得交换值更简单就直接上手了。首先考虑判断空链表;然后考虑链表非空的情况,因为要两两交换值,不能忘了判断head->next非空,对每
2017-03-26 23:30:44
566
原创 lintcode——在O(1)时间复杂度删除链表节点
1.问题 给定一个单链表中的一个等待被删除的节点(非表头或表尾)。请在在O(1)时间复杂度删除该链表节点。 给定 1->2->3->4,和节点 3,删除 3 之后,链表应该变为1->2->42.思路 这是我在lintcod上做的第一道题,soeasy(只是做完了之后是这感觉:))本来想的挺麻烦的,就觉得还不是得遍历吗,可时间复杂
2017-03-26 23:19:06
470
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人