
c++
_,_
这个作者很懒,什么都没留下…
展开
-
在O(1)时间复杂度删除链表节点
1.描述:给定一个单链表中的一个等待被删除的节点(非表头或表尾)。请在在O(1)时间复杂度删除该链表节点。 2.思路:所要删除的节点已给出,只需将该节点的值附成此节点的下一个节点的值,并将该节点的next指针指向它的next的next即可。 3.代码:void deleteNode(ListNode *node) { if(node->next!=NULL)原创 2017-03-27 16:32:36 · 317 阅读 · 0 评论 -
lintcode将二叉树拆成链表
1.描述: 将一棵二叉树按照前序遍历拆解成为一个假链表。所谓的假链表是说,用二叉树的 right 指针,来表示链表中的 next 指针。 注意事项 不要忘记将左儿子标记为 null,否则你可能会得到空间溢出或是时间溢出。 您在真实的面试中是否遇到过这个题? Yes 样例 1原创 2017-04-18 22:20:25 · 870 阅读 · 0 评论 -
二叉树的最大深度
1.描述: 给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的距离。 2.思路: 先判断根节点是否为空,为空返回深度为0,否则运用递归求左子树根节点的深度,再求右子数根节点深度,最后返回其中大的一个的值再加一。 3.代码: int maxDepth(TreeNode *root) { if(root==NULL)return 0; i原创 2017-04-06 16:42:08 · 243 阅读 · 0 评论 -
克隆二叉树
1.描述: 深度复制一个二叉树。 给定一个二叉树,返回一个他的 克隆品 。 样例 给定一个二叉树: 1 / \ 2 3 / \ 4 5 返回其相同结构相同数值的克隆二叉树: 1 / \ 2 3 / \ 4 5 2.思路: 先判断根节点是否为空,若为空返回根节点,否则,原创 2017-04-06 17:06:44 · 413 阅读 · 0 评论 -
lintcode把排序数组转换为高度最小的二叉搜索树
1.描述: 给一个排序数组(从小到大),将其转换为一棵高度最小的排序二叉树。 注意事项 There may exist multiple valid solutions, return any of them. 您在真实的面试中是否遇到过这个题? Yes 样例 给出数组 [1,2,3,4,5,6,7], 返回原创 2017-04-16 17:24:01 · 298 阅读 · 0 评论 -
lintcode二叉树的所有路径
1.描述: 给一棵二叉树,找出从根节点到叶子节点的所有路径。 您在真实的面试中是否遇到过这个题? Yes 样例 给出下面这棵二叉树: 1 / \ 2 3 \ 5 所有根到叶子的路径为: [ "1->2->5", "1->3" ] 2.思路: 写一个主函数调用递归支函数,在支函数中有原创 2017-04-20 16:37:26 · 254 阅读 · 0 评论 -
lintcode子树
1.描述; 有两个不同大小的二进制树: T1 有上百万的节点; T2 有好几百的节点。请设计一种算法,判定 T2 是否为 T1的子树。 注意事项 若 T1 中存在从节点 n 开始的子树与 T2 相同,我们称 T2 是 T1 的子树。也就是说,如果在 T1 节点 n 处将树砍断,砍断的部分将与 T2 完全相同。 您在真实的面试中是否遇到过这个题?原创 2017-04-20 17:22:24 · 285 阅读 · 0 评论 -
在二叉查找树中插入节点
1.描述: 给定一棵二叉查找树和一个新的树节点,将节点插入到树中。 你需要保证该树仍然是一棵二叉查找树。 注意事项 You can assume there is no duplicate values in this tree + node. 样例 给出如下一棵二叉查找树,在插入节点6之后这棵二叉查找树可以是这样的: 2原创 2017-05-11 17:09:59 · 292 阅读 · 0 评论 -
lintcode_快乐数
1.描述: 写一个算法来判断一个数是不是"快乐数"。 一个数是不是快乐是这么定义的:对于一个正整数,每一次将该数替换为他每个位置上的数字的平方和,然后重复这个过程直到这个数变为1,或是无限循环但始终变不到1。如果可以变为1,那么这个数就是快乐数。 您在真实的面试中是否遇到过这个题? Yes 样例 19 就是一个快乐数。 1^2 + 9^2原创 2017-05-11 17:49:44 · 1598 阅读 · 0 评论 -
lintcode_整数排序 II
1.描述: 给一组整数,按照升序排序。使用归并排序,快速排序,堆排序或者任何其他 O(n log n) 的排序算法。 您在真实的面试中是否遇到过这个题? Yes 样例 给出 [3, 2, 1, 4, 5], 排序后的结果为 [1, 2, 3, 4, 5]。 2.思路: 先把vector里的数导入到一个数组中,然后用sort原创 2017-06-01 17:06:32 · 584 阅读 · 0 评论 -
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原创 2017-05-21 23:17:16 · 236 阅读 · 0 评论 -
lintcode二叉查找树总结
这部分就两个题,思路还算简单,做来做去还是递归解决一切原创 2017-05-21 23:27:49 · 281 阅读 · 0 评论 -
lint_code 两数之和
1.描述: 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。 你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标。注意这里下标的范围是 1 到 n,不是以 0 开头。 注意事项 你可以假设只有一组答案。 您在真实的面试中是否遇到过这个题? Yes 样例 给出原创 2017-06-02 13:52:54 · 423 阅读 · 0 评论 -
lint_code 两数组的交
1.描述: 返回两个数组的交 注意事项 Each element in the result must be unique.The result can be in any order. 您在真实的面试中是否遇到过这个题? Yes 样例 nums1 = [1, 2, 2, 1], nums2 = [2, 2]原创 2017-06-02 21:25:12 · 349 阅读 · 0 评论 -
lintcode 合并区间
1.描述: 给出若干闭合区间,合并所有重叠的部分。 您在真实的面试中是否遇到过这个题? Yes 样例 给出的区间列表 => 合并后的区间列表: [ [ [1, 3], [1, 6], [2, 6], => [8, 10], [8, 10],原创 2017-06-08 17:32:28 · 416 阅读 · 0 评论 -
lintcode 两数组的交II
1.描述; 计算两个数组的交 注意事项 每个元素出现次数得和在数组里一样 答案可以以任意顺序给出 您在真实的面试中是否遇到过这个题? Yes 样例 nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2, 2]. 2.思路: 先把两个vector从大到小排原创 2017-06-08 20:30:59 · 316 阅读 · 0 评论 -
lintcode二叉树的层次遍历
1.描述: 给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问) 您在真实的面试中是否遇到过这个题? Yes 样例 给一棵二叉树 {3,9,20,#,#,15,7} : 3 / \ 9 20 / \ 15 7 返回他的分层遍历结果: [ [3], [9,20], [15,7] ] 2原创 2017-04-18 21:58:38 · 887 阅读 · 0 评论 -
lintcode 二叉树的最小深度
1.描述: 给定一个二叉树,找出其最小深度。 二叉树的最小深度为根节点到最近叶子节点的距离。 您在真实的面试中是否遇到过这个题? Yes 样例 给出一棵如下的二叉树: 1 / \ 2 3 / \ 4 5 这个二叉树的最小原创 2017-04-13 17:22:12 · 417 阅读 · 0 评论 -
lintcode二叉树的后序遍历
1.描述: 给出一棵二叉树,返回其节点值的后序遍历。 您在真实的面试中是否遇到过这个题? Yes 样例 给出一棵二叉树 {1,#,2,3}, 1 \ 2 / 3 返回 [3,2,1] 2.思路: 同前序种序 3.代码: vector v; vector postorder原创 2017-04-12 12:04:42 · 244 阅读 · 0 评论 -
链表倒数第n个节点
1.描述: 找到单链表倒数第n个节点,保证链表中节点的最少数量为n。 样例 给出链表 3->2->1->5->null和n = 2,返回倒数第二个节点的值1. 2.思路: 先写一个for循环来得到该链表的长度,然后再用一个for循环使迭代到要删除的节点位置,返回该节点即可。 3.代码: ListNode *nthToLast(ListNode *head,原创 2017-03-27 16:57:35 · 270 阅读 · 0 评论 -
翻转链表
1.描述: 翻转一个链表 样例 给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null 2.思路: 首先,新建一个链表作为反转后的链表的储存空间,然后在原链表上从头节点开始用循环反转前后两节点,一直循环到链表最后。 3.代码: ListNode *reverse(ListNode *head) { ListNod原创 2017-03-28 23:30:49 · 269 阅读 · 0 评论 -
删除链表中倒数第n个节点
1.描述: 删除链表中倒数第n个节点 2.思路:先用一个for循环得到链表长度,再用一个for循环到要删的节点,操作指针 3.代码 ListNode *removeNthFromEnd(ListNode *head, int n) { //ListNode *p= new ListNode(0); ListNode *p=new ListNode(0);原创 2017-03-29 22:12:25 · 258 阅读 · 0 评论 -
删除排序链表中的重复元素
1.描述:给定一个排序链表,删除所有重复的元素每个元素只留下一个。 样例 给出 1->1->2->null,返回 1->2->null 给出 1->1->2->3->3->null,返回 1->2->3->null 2.思路:新建两个链表指针,一个指向当前节点,一个指向下一节点,利用while循环判断两节点值是否相等,如不相等,则双迭代到下一节点,如果相等,将当前节点的next指向原创 2017-03-29 22:33:07 · 294 阅读 · 0 评论 -
翻转二叉树
1.描述: 翻转一棵二叉树 样例 1 1 / \ / \ 2 3 => 3 2 / \ 4 4 2.思路: 先判断根节点是否为空,若空则跳出递归,若不为空,交换左右子树根节点,然后依次递归左右子树 3.代码: void invertBinaryTree(Tre原创 2017-04-08 15:47:51 · 282 阅读 · 0 评论 -
等价二叉树
1.描述: 检查两棵二叉树是否等价。等价的意思是说,首先两棵二叉树必须拥有相同的结构,并且每个对应位置上的节点上的数都相等。 样例 1 1 / \ / \ 2 2 and 2 2 / / 4 4 就是两棵等价的二叉树。原创 2017-04-08 15:59:53 · 541 阅读 · 0 评论 -
lintcode平衡二叉树
1.描述: 给定一个二叉树,确定它是高度平衡的。对于这个问题,一棵高度平衡的二叉树的定义是:一棵二叉树中每个节点的两个子树的深度相差不会超过1。 样例 给出二叉树 A={3,9,20,#,#,15,7}, B={3,#,20,15,7} A) 3 B) 3 / \ \ 9 20原创 2017-04-09 22:05:01 · 685 阅读 · 0 评论 -
lintcode二叉树的前序遍历
1.描述: 给出一棵二叉树,返回其节点值的前序遍历。 您在真实的面试中是否遇到过这个题? Yes 样例 给出一棵二叉树 {1,#,2,3}, 1 \ 2 / 3 返回 [1,2,3]. 2.思路: 先访问根节点,若不为空将节点值添加到vector中,然后递归使用函数访问左右子树。原创 2017-04-10 17:25:30 · 259 阅读 · 0 评论 -
合并两个排序链表
1.描述: 将两个排序链表合并为一个新的排序链表 样例 给出 1->3->8->11->15->null,2->null, 返回1->2->3->8->11->15->null。 2.思路:新建一个链表,通过迭代比较原来2个链表的每个节点的数值,将小的那个附给新链表当前节点,然后将小的那个节点换为下个节点,再进行比较,如此循环直至结束。 3.代原创 2017-03-31 22:32:55 · 267 阅读 · 0 评论 -
链表划分
1.描述: 给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。 你应该保留两部分内链表节点原有的相对顺序。 样例 给定链表 1->4->3->2->5->2->null,并且 x=3 返回 1->2->2->4->3->5->null 2.思路: 新建两个链表,依次判断原链表与比较值的大小小的放左链表,大的放右链表,原创 2017-03-31 22:45:16 · 387 阅读 · 0 评论 -
链表插入排序
1.描述: 用插入排序对链表排序 样例 Given 1->3->2->0->null, return 0->1->2->3->null 2.思路: 新建一个链表,先将原链表头节点附给头节点,然后依次遍历后序节点,若节点值小于新链表的头节点就插到新链表的左边,否则插到右边。 3.代码: ListNode *dummy=new ListNode原创 2017-03-31 23:12:02 · 272 阅读 · 0 评论 -
删除链表中的元素
1.描述: 删除链表中等于给定值val的所有节点。 样例 给出链表 1->2->3->3->4->5->3, 和 val = 3, 你需要返回删除3之后的链表:1->2->4->5。 2.思路:遍历一遍链表,将等于指定值的节点的前驱指向他的后继即可 3.代码: ListNode *dummy=new ListNode(0);原创 2017-03-31 23:28:16 · 230 阅读 · 0 评论 -
链表求和
1.描述: 你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。 样例 给出两个链表 3->1->5->null 和 5->9->2->null,返回8->0->8->null 2.思路:新建一个链表,用一个循环将两个链表的数挨个相加取余保留,原创 2017-03-31 23:49:55 · 246 阅读 · 0 评论 -
两两交换链表中的节点
1.描述:给一个链表,两两交换其中的节点,然后返回交换后的链表。样例:给出 1->2->3->4, 你应该返回的链表是 2->1->4->3。 2.思路:先判断链表是否为空,如果不是空链表,就先将原链表的头结点head赋给一个指针节点p,通过在一个while中临时创建一个int型的变量作为数值转换的桥梁,将p与p->next的位置交换,交换完成后将p赋值p->next->next以为接下来的原创 2017-03-25 22:29:34 · 214 阅读 · 0 评论 -
lintcode二叉树的中序遍历
1.描述: 给出一棵二叉树,返回其中序遍历 您在真实的面试中是否遇到过这个题? Yes 样例 给出二叉树 {1,#,2,3}, 1 \ 2 / 3 返回 [1,3,2]. 2.思路: 类似前序 3.代码: vector v; vector inorderTraversal(Tre原创 2017-04-12 12:01:55 · 259 阅读 · 0 评论