随笔分类 - LeetCode
摘要:83. 删除排序链表中的重复元素 题意 删除排序链表中的重复元素 解题思路 题目已经限定了是排好序的链表,那么就需要特殊处理一下可能会出现连续的情况,找到起始结点和结束结点删除即可; 实现
        阅读全文
                
摘要:Search a 2D Matrix II 题意:从给定的二维数组中判断是否存在给定的数值。 二分搜索 思路:我一开始想到的就是之前在1中的方法,分别用两个变量来维护,然后缩小行和列的区间,但是发现没有确切的判断能够做到缩小它们的区间,所以放弃。为了不弄得那么复杂,可以从角落开始比较,比如左下角,这
        阅读全文
                
摘要:Kth Smallest Element in a BST 题意:求在BST中第k个最小的元素 DFS 思路:直接得出有序数组,然后根据下标求值,这应该是最直接能够想到的思路。 class Solution(object): def kthSmallest(self, root, k): """ :
        阅读全文
                
摘要:Find the Duplicate Number 寻找数组重复值 题意:给定一个包含n+1个整数的数组,其中每个整数在1到n之间,只存在一个重复值,寻找数组中的重复值,保证空间复杂度为O(1),而且时间复杂度不能为O(n^2)。 二分搜索 思路:n个槽需要放置n+1个数字,那么必然会出现一个槽存在
        阅读全文
                
摘要:454. 4Sum II 题意:从给定的数组中统计四个数相加和为0的个数 思路:用哈希表来保存,四个数分成两部分,统计双方和的个数,最后相加。 import collections class Solution(object): def fourSumCount(self, A, B, C, D):
        阅读全文
                
摘要:99. 恢复二叉搜索树 题意 在BST中存在两个元素被交换了,现在需要把这两个元素给交换回来变成BST。 解题思路 将其转为数组,并且排好序后重新赋值给树结点; 使用变量pre来保存访问的前一个结点,因为是中序遍历,所以前面一个结点必然是小于当前结点的,并且用两个变量维护错误的两个结点,最后将这两个
        阅读全文
                
摘要:86. 分隔链表 题意 给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。并且需要保留两个分区中每个节点的初始相对位置。 解题思路 用两个数组分别把小于和大于的都保存下来,然后依照顺序来创建链表;在原来的链表的基础上操作;创建新的结点; 用两个数组
        阅读全文
                
摘要:61. 旋转链表 题意 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数; 解题思路 快的先移动k个结点,然后再让慢的和快的一起移动,最后慢的就可以到达倒数第k个结点,最后将快的指向慢的即可,然后再移动这里需要注意的是,如果k超出链表长度的话,有两种情况,如果是能整除的
        阅读全文
                
摘要:234. 回文链表 题意 判断链表是否是回文串; 解题思路 将链表中的值加入到数组中,然后比较回文串,但是这有个缺点,就是需要花费数组的空间。 实现 如果是不需要额外的空间,那么可以让链表前半部倒置,让两个指针分别朝着前后两个方向移动,如果不相等则退出。
        阅读全文
                
摘要:316. Remove Duplicate Letters 题意:删除重复的字母,同时还要要求删除后的结果是最小的。 思路:利用贪心的思想,需要维持一个最小的字符串,如果遇到当前字符在后面还存在的话则不管;如果遇到当前字符比之前记录的要小的话则加入;如果遇到当前字符是只出现一次的则加入; 暴力 to
        阅读全文
                
摘要:142. 环形链表2 题意 在存在环的情况下,找出环的起点位置; 解题思路 先找到环中相遇的地方,然后让其中一方从起始位置移动,一方从相遇位置移动,双方相遇的时候就是环的起点; 证明图如下: 证明可参考这里 简化代码
        阅读全文
                
摘要:378. Kth Smallest Element in a Sorted Matrix 二分搜索 思路:每次扫描的统计小于中间值的个数,如果个数小于k,则说明不够,还要向右;如果个数大于k,则说明已经够了,那么则向左移动。 class Solution(object): def kthSmalle
        阅读全文
                
摘要:102. Binary Tree Level Order Traversal 思路:使用两个队列即可,然后交换,这样就可以区分每一层的值了。 class Solution(object): def levelOrder(self, root): """ :type root: TreeNode :r
        阅读全文
                
摘要:20. Valid Parentheses 思路:有效的括号 栈 class Solution(object): def isValid(self, s): """ :type s: str :rtype: bool """ stack = [] for x in s: if x in '})]':
        阅读全文
                
摘要:225. Implement Stack using Queues 思路:用两个队列实现 import collections class MyStack(object): def __init__(self): """ Initialize your data structure here. ""
        阅读全文
                
摘要:300. 最长上升子序列 题意 给定一个无序的整数数组,找到其中最长上升子序列的长度。 解题思路 动态规划:看到这种题目首先想到的就是dp,受到之前最长回文子串的影响,也以为是要用二维数组来解,然后用(i,j)记录区间的最长值,后来发现完全没有必要。假设dp[i]表示0到i中的最长序列长度,如果之前
        阅读全文
                
摘要:301. Remove Invalid Parentheses 题意:删除最少的无效的括号,使得字符串符合规范。 DFS 思路:先记录需要删除的左括号和右括号,然后遇到左括号就删,遇到右括号就删,分别删到不能再删,考虑递归的各种情况,符合规范则加入。 class Solution(object): 
        阅读全文
                
摘要:129. Sum Root to Leaf Numbers 题意:计算所有从跟结点到叶结点路径的值的和 DFS 思路:将所有递归到叶结点路径的值累加 class Solution(object): res = 0 def sumNumbers(self, root): """ :type root:
        阅读全文
                
摘要:108. 将有序数组转换为二叉搜索树 题意 将有序数组转化为链表; 解题思路 将数组切片,中间值作为根结点,两边则则作为左子树和右子树; 维护左右两个值,实现对数组切片的功能; 实现
        阅读全文
                
摘要:109. 有序链表转换二叉搜索树 回溯 这里比较难的点在于,如何去区分左子树和右子树,因为不可能像数组那样简单的分片操作,那么可以使用变量标记起始和终点即可。 或者把回调函数提取出来: 然后也可以将链表转化成数组,变成控制数组的左右区间,然后再进行操作:
        阅读全文
                
 
                    
                
 浙公网安备 33010602011771号
浙公网安备 33010602011771号