![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Leetcode
Kexin_Li
这个作者很懒,什么都没留下…
展开
-
Binary Tree Right Side View ---LeetCode
https://leetcode.com/problems/binary-tree-right-side-view/解题思路:这道题的意思要输出从右边看到的节点元素,即:每一层最右边的那个元素。因此我们可以用队列来实现,遍历每一层时,将最右边的元素入列。需要注意的是:在将左右子树的节点入列时,一定要先入列右节点!/** * Definition for a binary tree node. *原创 2016-11-28 16:08:59 · 340 阅读 · 0 评论 -
Remove Linked List Elements ---LeetCode
https://leetcode.com/problems/remove-linked-list-elements/解题思路: 这道题用一个 dummy node,遍历链表,如果遇到需要删除的元素,就将 prev 指针指向下一个元素就好了。/** * Definition for singly-linked list. * public class ListNode { * int原创 2016-11-25 15:45:19 · 261 阅读 · 0 评论 -
Remove Duplicates from Sorted List ---LeetCode
https://leetcode.com/problems/remove-duplicates-from-sorted-list/解题思路:遍历链表,遇到与前一个节点相同的值,就让前一个节点指向后一个节点,如果不等就直接移动当前节点继续遍历。/** * Definition for singly-linked list. * public class ListNode { * int原创 2016-11-25 11:59:19 · 197 阅读 · 0 评论 -
Partition List ---LeetCode
https://leetcode.com/problems/partition-list/https://leetcode.com/problems/partition-list/解题思路:这道题的意思是将小于 x 和大于等于 x 的数分开,但不改变原链表的相对顺序。用两个 dummy node,一个用来链接小于 x 的节点,一个用来链接大于等于 x 的节点,最后再将大链表接在小链表后面,这样就不会原创 2016-11-25 11:40:31 · 237 阅读 · 0 评论 -
Odd Even Linked List ---LeetCode
https://leetcode.com/problems/odd-even-linked-list/解题思路:利用双指针法。p1 和 p2 一前一后,在 while 循环中交叉将 p1 和 p2 指向合适位置。示意图为:/** * Definition for singly-linked list. * public class ListNode { * int val; *原创 2016-11-24 22:30:36 · 299 阅读 · 0 评论 -
Merge k Sorted Lists ---LeetCode
https://leetcode.com/problems/merge-k-sorted-lists/解题思路: http://blog.csdn.net/linhuanmars/article/details/19899259方法一:利用 Merge Two Sorted List 的归并思想,先将 k 个链表分成两半,再分别递归,最后归并两边的链表。归并排序是一个时间复杂度为 O(nlogn)原创 2016-11-24 22:07:27 · 234 阅读 · 0 评论 -
Sort List ---LeetCode
https://leetcode.com/problems/sort-list/解题思路:这里选择归并排序,顺便能用到 Merge Two Sorted List 的解法。归并排序三个步骤:找到链表中点对左右两边链表进行递归最后归并两边链表/** * Definition for singly-linked list. * public class ListNode { *原创 2016-11-24 21:06:29 · 234 阅读 · 0 评论 -
Linked List Cycle II ---LeetCode
https://leetcode.com/problems/linked-list-cycle-ii/解题思路:首先推荐两篇博文,写的很全面。 http://www.cnblogs.com/hiddenfox/p/3408931.html http://blog.csdn.net/cs_guoxiaozhu/article/details/14209743如果链表有环,那么 slow 走的路程是原创 2016-11-24 20:41:08 · 255 阅读 · 0 评论 -
Merge Two Sorted List ---LeetCode
https://leetcode.com/problems/merge-two-sorted-lists/解题思路:这道题是将两个有序链表归并。首先我们定义一个 dummy node,用来指向表头。接着遍历两个链表,将每个位置上的较小者添加到 dummy node 后面,并及时更新指针,指向下一位。最后如果两个链表不一样长,要记得将剩余的元素添加到末尾。/** * Definition for s原创 2016-11-24 20:30:52 · 288 阅读 · 0 评论 -
Insertion Sort List ---LeetCode
https://leetcode.com/problems/insertion-sort-list/解题思路:首先回顾一下插入排序: 插入排序的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插原创 2016-11-24 20:01:02 · 284 阅读 · 0 评论 -
Longest Consecutive Sequence ---LeetCode
https://leetcode.com/problems/longest-consecutive-sequence/解题思路: 这道题首先可以用排序很直接地解决。遍历排好序的数组,遇到连续的串就使 count 自加,一旦有间断就重置 count。并维护最大值 max。但是排序的时间复杂度是 O(nlogn),不符合题目要求的 O(n)。solution 1 : Sortpublic int lo原创 2016-11-24 18:13:42 · 234 阅读 · 0 评论 -
Remove Duplicates from Sorted List II ---LeetCode
https://leetcode.com/problems/remove-duplicates-from-sorted-list-ii/解题思路: 类似于 Remove Duplicates from Sorted List 的思想,只不过本题要求将重复的所有元素都删掉,那么这时我们需要一个 prev 指针来辅助,将 prev 指针指向 curr.next 的过程就能将重复元素都删除。同时,需要一原创 2016-11-25 15:31:42 · 317 阅读 · 0 评论 -
Remove Nth Node From End of List ---LeetCode
https://leetcode.com/problems/remove-nth-node-from-end-of-list/解题思路: 利用两个指针,slow 和 fast。首先让 fast 指针先走 n 步,这样的话 slow 和 fast 再一起走,直到 fast 等于 null 时 slow 所在的位置刚好的倒数第 n 个节点。但是由于没有 prev 指针的存在,为了我们删除节点的方便,我原创 2016-11-25 16:03:54 · 227 阅读 · 0 评论 -
Reverse Linked List ---LeetCode
https://leetcode.com/problems/reverse-linked-list/解题思路: 这里使用迭代实现的链表反转,链表反转时需要做两件事,一是将当前节点指向前一个节点,二是移动节点继续迭代。/** * Definition for singly-linked list. * public class ListNode { * int val; *原创 2016-11-25 16:47:14 · 241 阅读 · 0 评论 -
Binary Tree Paths ---LeetCode
https://leetcode.com/problems/binary-tree-paths/解题思路:这道题需要求返回所有从根节点到叶子节点的路径,用递归实现。求路径的题目思想都大差不差,注意细节就好。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNo原创 2016-11-28 15:52:12 · 417 阅读 · 0 评论 -
Path Sum III ---LeetCode
https://leetcode.com/problems/path-sum-iii/这道题与 Path Sum 与 Path Sum II 的区别在于,这道题不需要遍历到叶子节点再结束,同时也不用从根节点开始记录,只要遇到有相加等于 sum 的节点,就记录下来,最终输出有几条这样的路径。/** * Definition for a binary tree node. * public clas原创 2016-11-28 14:55:02 · 285 阅读 · 0 评论 -
Path Sum II ---LeetCode
https://leetcode.com/problems/path-sum-ii/解题思路: 和 Path Sum 类似,都是通过递归来找到合适的叶子节点,只是这道题在过程中要记录下满足要求的所有节点。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNo原创 2016-11-28 12:21:53 · 295 阅读 · 0 评论 -
Path Sum ---LeetCode
https://leetcode.com/problems/path-sum/解题思路:这道题我们通过递归,依次将 sum 的值缩减,最终判断叶子节点是否等于 sum。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * Tre原创 2016-11-28 11:41:52 · 342 阅读 · 0 评论 -
Binary Tree Level Order Traversal II
https://leetcode.com/problems/binary-tree-level-order-traversal-ii/解题思路: 和 Binary Tree Level Order Traversal 类似,最后将结果反转一下就好。/** * Definition for a binary tree node. * public class TreeNode { *原创 2016-11-28 10:19:52 · 258 阅读 · 0 评论 -
Binary Tree Postorder Traversal ---LeetCode
https://leetcode.com/problems/binary-tree-postorder-traversal/二叉树的后序遍历,递归调用还是和前面的思路一样。迭代的方法这里使用了两个栈,一个栈用于 前–左–右 的遍历该层时的临时存储栈,另外一个用于存储结果。同时,这两个链接也有很多好的方法,大家一起学习一下。 http://blog.csdn.net/linhuanmars/arti原创 2016-11-27 23:31:38 · 290 阅读 · 0 评论 -
Binary Search Tree Iterator
https://leetcode.com/problems/binary-search-tree-iterator/解题思路:首先回顾一下二叉查找树: 二叉查找树(BST)是指一棵空树或者是具有以下性质的树: 任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 任意节点的左、右子树也分别为原创 2016-11-27 20:24:53 · 242 阅读 · 0 评论 -
LeetCode Summary I ---Linked List
Part 1:Add two numbers Add two numbers II这两道题都是相加类的题,需要维护当前位和进位,第一道是链表倒序存放元素,第二道是正序。正序存放元素的栈的解法需要再熟悉一下。另外需要注意的是:当最高位仍有进位时,需要新建一个节点来接受进位。 同时和数组的这类题 Plus One 一起熟悉熟悉。Part 2:Delete Node in a Linked List原创 2016-11-27 13:32:14 · 257 阅读 · 0 评论 -
Add Two Numbers II ---LeetCode
https://leetcode.com/problems/add-two-numbers-ii/解题思路: 两种方法,第一种会改变链表结构,第二种不会。反转链表法:先反转链表,然后计算结果,最后再反转结果。这将改变链表结构。利用栈:定义两个栈,先将两个链表里的元素分别入栈,接着在 while 大循环里将元素依次相加,并维护进位。solution 1 : Reverse /** * Def原创 2016-11-23 21:19:30 · 247 阅读 · 0 评论 -
Reorder List ---LeetCode
https://leetcode.com/problems/reorder-list/解题思路: 首先题目要求了要 in-place。表明我们不能创建一个新的链表,而只能通过改变指针的指向来重新排序。一共分为三个步骤解决:使用 slow 和 fast 指针找到链表中点,将链表分为两半。将后半段链表反转。最后将两段链表归并即可。示意图:/** * Definition for singly原创 2016-11-25 17:30:16 · 239 阅读 · 0 评论 -
Linked List Cycle ---LeetCode
https://leetcode.com/problems/linked-list-cycle/解题思路: 判断链表有没有环。我们使用两个指针,一个一次走一步,一个一次走两步。如果链表有环,那么他们一定会相遇。需要注意一下 while 的循环条件 fast.next != null && fast.next.next != null,如果没有后面一句那么在循环体里的 fast = fast.nex原创 2016-11-23 23:02:19 · 271 阅读 · 0 评论 -
Intersection of Two Linked List ---LeetCode
https://leetcode.com/problems/intersection-of-two-linked-lists/解题思路:方法一利用两个表长度的差值,让长的链表先走,直到两个链表长度相等。接着两个表都一步一步走,如果碰头就 return。/** * Definition for singly-linked list. * public class ListNode { *原创 2016-11-23 22:41:37 · 240 阅读 · 0 评论 -
Sum of Left Leaves ---LeetCode
https://leetcode.com/problems/sum-of-left-leaves/解题思路:思路就是遍历整棵树,遇到左子节点的叶子节点就记录下来,最后输出整个结果。这里有递归和迭代两种方法,要注意下细节。solution 1 : recursive/** * Definition for a binary tree node. * public class TreeNode {原创 2016-11-29 22:51:25 · 299 阅读 · 0 评论 -
Same Tree ---LeetCode
https://leetcode.com/problems/same-tree/解题思路:姑且认为有这么几种情况下两棵树是不相等的,一是长度不等,而是节点的值不等。所以我们用递归,如果都躲过了这两个条件直到遍历到叶子节点,那么这两棵树就是相等的。/** * Definition for a binary tree node. * public class TreeNode { * in原创 2016-11-29 22:18:46 · 337 阅读 · 0 评论 -
Minimum Depth of Binary Tree ---LeetCode
https://leetcode.com/problems/minimum-depth-of-binary-tree/解题思路:与 Maximum Depth of Binary Tree 这道题相反,是求二叉树的最小深度。贴两种写法:/** * Definition for a binary tree node. * public class TreeNode { * int val原创 2016-11-29 21:32:01 · 290 阅读 · 0 评论 -
Maximum Depth of Binary Tree ---LeetCode
https://leetcode.com/problems/maximum-depth-of-binary-tree/解题思路:这道题要找出二叉树的最大深度,显而易见用 DFS 来实现,可以递归实现也可以迭代实现。最大深度即比较左子树与右子树的深度,谁大就输出谁。/** * Definition for a binary tree node. * public class TreeNode {原创 2016-11-29 20:12:26 · 274 阅读 · 0 评论 -
Kth Smallest Element in a BST ---LeetCode
https://leetcode.com/problems/kth-smallest-element-in-a-bst/解题思路:根据 BST 的性质,先序遍历输出的正好是从小到大的升序排列。因此可以用中序遍历来解决这道题。现在回顾一下中序遍历这道题 Binary Tree Inorder Traversal: 维护一个栈,先遍历左子节点,接着遍历右节点。这道题只需要在出栈的时候将 k 自减,直原创 2016-11-29 18:33:31 · 346 阅读 · 0 评论 -
Invert Binary Tree ---LeetCode
https://leetcode.com/problems/invert-binary-tree/解题思路:这道题需要我们反转二叉树,可以认为是每一层的左右子节点互相交换。涉及到层序遍历,很容易想到维护一个队列,将左右子节点分别入列,接着再交换左右子节点。将队列弹出的节点作为下一次循环的根节点。另外还有好几种方法,可以看看这个链接: https://discuss.leetcode.com/top原创 2016-11-29 10:59:25 · 297 阅读 · 0 评论 -
Flatten Binary Tree to Linked List ---LeetCode
https://leetcode.com/problems/flatten-binary-tree-to-linked-list/解题思路:遍历一遍树,如果根节点的右子节点不为空,将其入栈,并将左子节点移到右边,左边制空。当移到叶子节点时,再将栈里的节点依次弹出。/** * Definition for a binary tree node. * public class TreeNode {原创 2016-11-29 10:40:49 · 401 阅读 · 0 评论 -
Count Complete Tree Nodes ---LeetCode
https://leetcode.com/problems/count-complete-tree-nodes/解题思路:题目要求计算一棵完全二叉树的节点数。首先回顾一下完全二叉树: In a complete binary tree every level, except possibly the last, is completely filled, and all nodes in the原创 2016-11-28 21:02:43 · 344 阅读 · 0 评论 -
Convert Sorted Array to Binary Search Tree ---LeetCode
https://leetcode.com/problems/convert-sorted-array-to-binary-search-tree/解题思路:题目给我们一个已按升序排好的数组,让我们把它转换为一棵高度平衡的二叉查找树。已排好序的数组的中点可以看做根节点,中点左边的数组即为左子树,右边的数组即为右子树,再递归左子树和右子树来构造整棵 BST。/** * Definition for a原创 2016-11-28 17:58:48 · 290 阅读 · 0 评论 -
Construct Binary Tree from Inorder and Postorder Traversal ---LeetCode
https://leetcode.com/problems/construct-binary-tree-from-inorder-and-postorder-traversal/解题思路: http://www.cnblogs.com/grandyang/p/4296193.html/** * Definition for a binary tree node. * public class原创 2016-11-28 17:45:32 · 348 阅读 · 0 评论 -
Populating Next Right Pointers in Each Node ---LeetCode
https://leetcode.com/problems/populating-next-right-pointers-in-each-node/解题思路:观察可以发现,每一层从左至右每一个节点依次指向它右边的节点。因此可以用层序遍历 Binary Tree Level Order Traversal 来解决这道题,在遍历到这一层的时候,判断它是不是本层最右的元素,如果不是就指向旁边的元素,如果是原创 2016-11-29 22:11:44 · 366 阅读 · 0 评论 -
Populating Next Right Pointers in Each Node II ---LeetCode
https://leetcode.com/problems/populating-next-right-pointers-in-each-node-ii/解题思路:和 Populating Next Right Pointers in Each Node 这题类似,只是将题目要求任意化,不再局限为仅仅给一棵左右子树高度相等的二叉树。这时我们需要多判断一下它是否具有左右子节点即可。/** * Def原创 2016-11-30 13:59:45 · 301 阅读 · 0 评论 -
Balanced Binary Tree ---LeetCode
https://leetcode.com/problems/balanced-binary-tree/解题思路:首先回顾一下二叉平衡树: 平衡二叉树(AVL):在AVL树中任何节点的两个子树的高度最大差别为1,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下都是O(log n)。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。(via Wikipedia)这里使用 getH原创 2016-11-27 19:43:38 · 286 阅读 · 0 评论 -
Delete Node in a Linked List ---LeetCode
https://leetcode.com/problems/delete-node-in-a-linked-list/解题思路: 由于没有 prev 指针,因此不会真正意义上的删除节点。我们可以将下一个节点的值赋给本节点,再将本节点指向下下个结点,删除下一个节点。这样间接地删除本节点。 题目要求说了不会删除尾节点,所以 node.next 以及 node.next.next 都不会出错。/**原创 2016-11-23 22:32:05 · 227 阅读 · 0 评论