08 2020 档案
摘要:LeetCode Notes_#430_扁平化多级双向链表LeetCodeContents题目思路递归函数Node flattenDFS(Node prev, Node cur)终止条件递推过程解答复杂度分析 题目多级双向链表中,除了指向下一个节点和前一个节点指针之外,它还有一个子链表指针,可能指向单独的双向链表。这些子列表也可能会有一个或多个自己的子项,依此类推,生成多级数据结构,如下面的示...
阅读全文
摘要:LeetCode Notes_#707_设计链表LeetCodeContents题目解答方法1:单链表复杂度分析方法2:双链表复杂度分析 题目设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val 和 next。val 是当前节点的值,next 是指向下一个节点的指针/引用。如果要使用双向链表,则还需要一个属性 prev 以指示链表中的上一个节点。假设链表中的所有...
阅读全文
摘要:LeetCode Notes_#234_回文链表LeetCodeContents题目解答方法1:用ArrayList保存数据并判断复杂度分析方法2:双指针+反转链表复杂度分析 题目请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题? 解答 方法1...
阅读全文
摘要:LeetCode Notes_#328_奇偶链表LeetCodeContents题目解答方法1:计数器+借用额外空间复杂度分析方法2:原地修改链表复杂度分析 题目给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),no...
阅读全文
摘要:LeetCode Notes_#203_移除链表元素LeetCodeContents题目思路分析解答复杂度分析 题目删除链表中等于给定值 val 的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5 思路分析循环遍历链表,遇到val就删除。注意两点:第一个节点需要被删除的情况。引入哑节点。删除操作需要有删除节点的前一个节点的指针...
阅读全文
摘要:LeetCode Notes_#19_删除链表的倒数第N个节点LeetCodeContents题目思路分析算法流程解答1:不使用哑节点解答2:使用哑节点复杂度分析 题目给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。进阶...
阅读全文
摘要:【转载】递归、分治策略、动态规划以及贪心算法之间的关系转载Contents引言1、分治策略(Divide and Conquer)2、动态规划(Dynamic Programming)3、贪心算法(Greedy Algorithm)动态规划与递归的比较4、总结参考资料:转载自递归、分治策略、动态规划以及贪心算法之间的关系之前对于递归、分治策略、动态规划、贪心算法这些概念有点模糊,看到这一篇文章写...
阅读全文
摘要:LeetCode Notes_#220_存在重复元素 IIILeetCodeContents题目思路分析方法1:暴力搜索方法2:使用TreeSet(二叉搜索树)解答复杂度分析 题目在整数数组 nums 中,是否存在两个下标 i 和 j,使得 nums [i] 和 nums [j] 的差的绝对值小于等于 t ,且满足 i 和 j 的差的绝对值也小于等于 ķ 。如果存在则返回 true,不存在返回...
阅读全文
摘要:LeetCode Notes_#703_数据流的第K大元素LeetCodeContents题目思路分析方法1:二叉搜索树方法2:小顶堆解答解答1:二叉搜索树复杂度分析解答2:小顶堆复杂度分析 题目设计一个找到数据流中第K大元素的类(class)。注意是排序后的第K大元素,不是第K个不同的元素。你的 KthLargest 类需要一个同时接收整数 k 和整数数组nums 的构造器,它包含数据流中的...
阅读全文
摘要:LeetCode Notes_#450_删除二叉搜索树中的节点Contents题目思路分析解答复杂度分析 题目给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。一般来说,删除节点可分为两个步骤:首先找到需要删除的节点;如果找到了,删除它。说明: 要求算法时间复杂度为 O(h)...
阅读全文
摘要:算法第四版编程环境配置(Windows10系统+IntelliJ Idea环境导入algs4.jar)Contents官网教程概览导入algs4.jar的各种方法1. 在Idea导入algs4.jar2. 在Git Bash中导入algs4.jar(必须使用lift安装包)3. 在Windows命令提示符中导入algs4.jar(手动操作)4. 在Windows命令提示符中导入algs4.jar...
阅读全文
摘要:LeetCode Notes_#173_二叉搜索树迭代器LeetCodeContents题目思路分析方法1:在构造器中得到中序遍历序列方法2:拆分非递归中序遍历模板解答解答1:在构造器中得到中序遍历序列复杂度分析解答2:拆分非递归中序遍历模板复杂度分析 题目实现一个二叉搜索树迭代器。你将使用二叉搜索树的根节点初始化迭代器。调用 next() 将返回二叉搜索树中的下一个最小的数。示例:BSTIt...
阅读全文
摘要:LeetCode Notes_#98_验证二叉搜索树LeetCodeContents题目思路分析递归终止条件递推过程回溯返回值非递归解答解答1:前序遍历+上下界+递归解答2:前序遍历+上下界+非递归解答3:中序遍历+递归解答4:中序遍历+非递归复杂度分析总结 题目给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只...
阅读全文
摘要:LeetCode Notes_#117_填充每个节点的下一个右侧节点指针 IILeetCodeContents题目思路分析方法1:层序遍历方法2:利用已有的next指针解答解答1:层序遍历解答2:利用已有的next指针复杂度分析 题目给定一个二叉树struct Node { int val; Node *left; Node *right; Node *next;}填充它的每个 nex...
阅读全文
摘要:LeetCode Notes_#116_填充每个节点的下一个右侧节点指针Contents题目思路分析方法1:层序遍历方法2:借助已有的next指针方法3:递归解答解答1:层序遍历复杂度分析解答2:利用已有的next指针复杂度分析解答3:递归复杂度分析 题目给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:struct Node { int val; N...
阅读全文
摘要:LeetCode Notes_#104_从中序与后序遍历序列构造二叉树LeetCodeContents题目思路分析解答复杂度分析 题目根据一棵树的中序遍历与后序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出中序遍历 inorder = [9,3,15,20,7]后序遍历 postorder = [9,15,7,20,3]返回如下的二叉树: 3 / \ 9 20 ...
阅读全文
摘要:剑指Offer_#9_用两个栈实现队列剑指offerContents题目思路分析算法流程入队列appendTail()出队列deleteHead()解答复杂度分析 题目用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例 ...
阅读全文

浙公网安备 33010602011771号