随笔分类 - LeetCode
摘要:143. 重排链表 题意 给定一个单链表 L:L0→L1→…→L**n-1→Ln , 将其重新排列后变为: L0→L**n→L1→L**n-1→L2→L**n-2→… 并且需要实际的进行节点交换; 解题思路 拆分成两条链表:找到中间的结点;将链表拆分成左右两条链表,并且将右边的链表进行反转;将左右两
阅读全文
摘要:817. 链表组件 题意 求链表中一段最长连续结点的值(值必须出现在列表G中,不要求顺序)构成的集合的个数; 解题思路 一开始还以为是要求顺序的,想说用递归来做,发现链表的值只是出现在列表中而已,因此判断链表中的值出现在列表中的次数(连续不算)即可,有点类似移动窗口的思路; 下面的实现是优化了几次,
阅读全文
摘要:328. 奇偶链表 题意 奇数的链表结点插在偶数的链表结点前面; 解题思路 维护两条链表,分别记录下奇数和偶数的链表结点,最后将偶数链表的起始结点连接到奇数链表的末尾结点后面; 实现
阅读全文
摘要:147. 对链表进行插入排序 题意 对链表进行插入排序 解题思路 利用插入排序的思想,当前节点和下一个节点进行比较,找到当前值大于下一个值的节点A,接着将该节点A的方向指向节点的下下个位置C,找到最后一个个比当前节点的下一个节点B的值还有小的节点E,将节点B的方向指向节点E的下一个节点Q,再将节点E
阅读全文
摘要:24. 两两交换链表中的节点 题意 两两交换链表中的结点 解题思路 递归找终止条件:本题终止条件很明显,当递归到链表为空或者链表只剩一个元素的时候,没得交换了,自然就终止了。找返回值:回给上一层递归的值应该是已经交换完成后的子链表。单次的过程:因为递归是重复做一样的事情,所以从宏观上考虑,只用考虑某
阅读全文
摘要:109. 排序链表 题意 在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。 解题思路 常数集空间复杂度:将其转化为数组; 时间复杂度为O(nlogn):用归并排序; 实现
阅读全文
摘要:565. Array Nesting 这道题目的大概意思是,先选定数组中一个起始的位置,再根据她的值定位到相应的下标,继续下去,直到出现循环为止,最后找出最长的不循环的。 显然需要将数组中每个位置起始的都要计算一遍,所以首先想到的就是dfs。 或者是不用函数递归的形式,直接写在一个函数里面,这样还避
阅读全文
摘要:[LeetCode]495. Teemo Attacking 时隔多日,又要开始继续重拾算法了; 题目:这道题目是一个披着游戏皮的数组题目,计算提莫总共攻击时长。 分为三种情况: 如果当前攻击时间点加上duration后超过了下一个时间点,那个显然下一个时间点就不用计算了,直到找到数组中没有超过的时
阅读全文
摘要:Reverse Pairs 翻转对 题意 计算数组里面下标i小于j,但是i的值要大于j的值的两倍的搭配的个数(也就是可能会有多种搭配);网址 做法 这道题显然是不允许使用最简单的方法:两次循环,逐次进行判断,这样做的时间复杂度就是O(n^2),OJ无法通过,需要考虑另外的实现方式; class So
阅读全文
摘要:Range Sum Query 2D - Immutable 二维数组范围和 题意 在二维数组中求范围的和,需要注意的是: 解法 根据要求,可能会调用很多次的求和函数,设想如果范围比较大,那么简单的每次调用都要计算每行的和再累加显然是不符合题目的要求,因为题目说了矩阵是不可变的,因此我们可以使用动态
阅读全文
摘要:Maximum Binary Tree 最大值二叉树 题意 解法 dfs class Solution(object): def constructMaximumBinaryTree(self, nums): """ :type nums: List[int] :rtype: TreeNode ""
阅读全文
摘要:Word Break 单词分解 题意:这道题的思路和前面一道也是字符串的切分的题目的思路是一样的,这里是判断当前的字符串是否是字典中给定的字符串来组成。 回溯 回溯方法,可以用idx,也可以用当前子串的形式。 class Solution(object): def wordBreak(self, s
阅读全文
摘要:Count and Say 计数和发言 思路:首先要理解题意,可以发现后者是在前者的基础之上进行的操作,所以我们拿之前的结果作为现在函数的参数循环n-1次即可,接下来就是统计字符串中相应字符的个数,需要注意的是最后一个字符别忘了处理。 class Solution(object): def coun
阅读全文
摘要:Longest Valid Parentheses 最长有效括号数 动态规划 思路:看到这道题,首先想到的是动态规划,然后想用之前做最长回文串的思路来做,但是后来发现它的括号并不一定是嵌套的,比如()(),这种情况下用之前的方法就不行了。 假定dp[i]表示从下标i开始到字符串最后构成的最长回文串的
阅读全文
摘要:Unique Binary Search Trees II 唯一二叉树2 思路:利用回溯的思想,以其中一个值作为根结点,两边分别作为左结点和右结点的值。 class Solution(object): def generateTrees(self, n): """ :type n: int :rty
阅读全文
摘要:Unique Binary Search Trees 唯一BST数量 思路:这道题如果不知道卡特兰数的话是做不出的,它的思想为结点个数为n的二叉树数量为左结点数量和右结点数量的乘积之和。 class Solution(object): def numTrees(self, n): """ :type
阅读全文
摘要:92. 反转链表 II 思路:将中间的链表进行反转,然后前后进行连接,需要注意有前结点和没有前结点的情况。class Solution(object): def reverseBetween(self, head, m, n): """ :type head: ListNode :type m: i
阅读全文
摘要:160. 相交链表 题意 找到两个单链表相交的起始节点。 解题思路 分别计算两条链表的长度,接着先让长的链表走两者距离的差,然后再和短的链表一起走,在过程中判断它们的交集。 实现
阅读全文
摘要:Binary Tree Zigzag Level Order Traversal 题意:按照Zigzag的顺序来遍历二叉树。 思路:我们可以按照之前的层次遍历的思路来解决,使用两个队列来计算,因为它的规则是第二个为反序的,所以reverse即可。 class Solution(object): de
阅读全文
摘要:82. 删除排序链表中的重复元素 II 题意 和1不同的是,1只删除一个重复数字,但是在2中需要删除所有含有重复数字的节点。 解题思路 我直接重新构造了一颗新的链表,没有在原链表的基础之上进行操作; 实现 当然你也可以在原来链表的基础之上进行更改,如下:
阅读全文

浙公网安备 33010602011771号