数据结构
老王不让用
芝兰生于幽谷,不以无人而不芳; 君子修身立德,不为穷困而改节
展开
-
认识 LFU 算法
1、LeetCode460. LFU缓存请你为 最不经常使用(LFU)缓存算法设计并实现数据结构。它应该支持以下操作:get和put。get(key)- 如果键存在于缓存中,则获取键的值(总是正数),否则返回 -1。put(key, value)- 如果键已存在,则变更其值;如果键不存在,请插入键值对。当缓存达到其容量时,则应该在插入新项之前,使最不经常使用的项无效。在此问题中,当存在平局(即两个或更多个键具有相同使用频率)时,应该去除最久未使用的键。「项的使用次数」就是自插入该项...转载 2020-08-13 15:35:34 · 980 阅读 · 0 评论 -
特殊数据结构:单调栈
鉴于单调栈应用场景多,特定将LeetCode中用到单调栈解决问题的题集收拢成一文方便对比分析7、LeetCode316. 去除重复字母9、LeetCode402. 移掉K位数字10、LeetCode321. 拼接最大数11、LeetCode581. 最短无序连续子数组12、LeetCode42. 接雨水13、LeetCode84. 柱状图中最大的矩形14、LeetCode907. 子数组的最小值之和...原创 2020-07-17 22:32:08 · 326 阅读 · 0 评论 -
下一个更大元素相关题集
4、LeetCode单调栈题集2、LeetCode42. 接雨水4、LeetCode84. 柱状图中最大的矩形3、LeetCode907. 子数组的最小值之和3、leetcode1019. 链表中的下一个更大节点496.下一个更大元素I503.下一个更大元素II1118.一月有多少天739. 每日温度(中等) 暴力解法 + 单调栈316. 去除重复字母(困难) 栈 + 哨兵技巧(Java、C++、Python)901. 股票价格跨度(中等) 「力扣」第...原创 2020-07-12 19:23:33 · 273 阅读 · 0 评论 -
特殊数据结构:栈和队列的相互转化
队列是一种先进先出的数据结构,栈是一种先进后出的数据结构,形象一点就是这样:目录1、LeetCode232. 用栈实现队列2、LeetCode225. 用队列实现栈1、LeetCode232. 用栈实现队列使用栈实现队列的下列操作:push(x) -- 将一个元素放入队列的尾部。 pop() -- 从队列首部移除元素。 peek() -- 返回队列首部的元素。 empty() -- 返回队列是否为空。示例:MyQueue queue = new MyQueue()..转载 2020-07-12 19:21:51 · 258 阅读 · 0 评论 -
特殊数据结构:优先队列(二叉堆)
二叉堆(Binary Heap)没什么神秘,性质比二叉搜索树 BST 还简单。其主要操作就两个,sink(下沉)和 swim(上浮),用以维护二叉堆的性质。其主要应用有两个,首先是一种排序方法「堆排序」,第二是一种很有用的数据结构「优先级队列」。 本文就以实现优先级队列(Priority Queue)为例,通过图片和人类的语言来描述一下二叉堆怎么运作的。目录1、二叉堆概览2、优先级队列概览3、实现 swim 和 sink4、实现 delMax 和 ins...转载 2020-07-12 19:20:55 · 332 阅读 · 0 评论 -
死磕有效括号Ⅱ
1、LeetCode678. 有效的括号字符串给定一个只包含三种字符的字符串:(,)和 *,写一个函数来检验这个字符串是否为有效字符串。有效字符串具有如下规则:任何左括号 (必须有相应的右括号 )。 任何右括号 )必须有相应的左括号 (。 左括号 ( 必须在对应的右括号之前 )。 *可以被视为单个右括号 ),或单个左括号 (,或一个空字符串。 一个空字符串也被视为有效字符串。示例 1:输入: "()"输出: True示例 2:输入: "(*)"输出: T...原创 2020-06-10 21:13:32 · 265 阅读 · 0 评论 -
死磕有效括号Ⅰ
目录1、LeetCode20. 有效的括号2、LeetCode22. 括号生成3、LeetCode32. 最长有效括号3.1、滑动窗口暴力破解3.2、借助栈3.3、动态规划1、LeetCode20. 有效的括号给定一个只包括 '(',')','{','}','[',']'?的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: true原创 2020-06-09 19:03:30 · 261 阅读 · 0 评论 -
链表:常见的优雅操作
1、leetcode206. 反转链表2、获取中间点2.1、leetcode234. 回文链表3、环形链表原创 2020-05-22 23:23:46 · 328 阅读 · 0 评论 -
链表:与其它数据结构的结合
目录1、leetcode109. 有序链表转换二叉搜索树2、leetcode1367. 二叉树中的列表3、leetcode1019. 链表中的下一个更大节点3.1、暴力破解3.2、单调栈1、leetcode109. 有序链表转换二叉搜索树 给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 1。示例:给定的有序链表: [-10, -3, 0, 5, 9],...原创 2020-05-22 15:51:04 · 306 阅读 · 0 评论 -
链表:排序操作中的一些骚方法
目录1、leetcode143. 重排链表2、leetcode147. 对链表进行插入排序3、leetcode148. 排序链表1、leetcode143. 重排链表给定一个单链表L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…注意:你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例1:给定链表 1->2->3->4, 重新排列为 1->4->2->3.示例..原创 2020-05-21 15:33:21 · 339 阅读 · 0 评论 -
链表:翻转操作中的一些骚方法
1、leetcode24. 两两交换链表中的节点2、leetcode25. K 个一组翻转链表3、leetcode61. 旋转链表4、leetcode92. 反转链表 II原创 2020-05-21 11:03:09 · 224 阅读 · 0 评论 -
链表:合并操作中的一些骚方法
1、leetcode21. 合并两个有序链表对于两个有序链表的合并操作应用场景还是比较多的,如:链表的归并排序。思路:分别遍历两个链表,依次将头节点值小的取出插入新的链表中即可;注意:当其中一个链表为空时,直接取另一个链表节点即可,两个链表均取完结束循环。 public ListNode mergeTwoLists(ListNode l1, ListNode l2) { if(l1 == null && l2 == null){ return nul...原创 2020-05-20 15:02:20 · 282 阅读 · 0 评论 -
链表:删除操作中的一些骚方法
目录1、leetcode19. 删除链表的倒数第N个节点2、leetcode83. 删除排序链表中的重复元素3、leetcode82. 删除排序链表中的重复元素 II4、leetcode1171. 从链表中删去总和值为零的连续节点1、leetcode19. 删除链表的倒数第N个节点给定一个链表,删除链表的倒数第n个节点,并且返回链表的头结点。给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->..原创 2020-05-19 18:49:15 · 393 阅读 · 0 评论 -
二叉树:公共祖先问题
1、二叉树的最近公共祖先 leetcode2362、节点与其祖先的最大差值 leetcode10263、最深叶节点的最近公共祖先 leetcode11234、面试题 04.08. 首个共同祖先原创 2020-05-04 18:25:03 · 914 阅读 · 0 评论 -
二叉树:路径搜索中的一些问题
1、求二叉树的最大/小深度2、求二叉树的 正向/逆向 路径和原创 2020-05-02 18:10:57 · 577 阅读 · 0 评论 -
二叉树:叶节点的一些操作
叶子节点:没有子节点的节点。1、求叶子节点之和2、求叶子节点的父节点之和3、求左叶子节点leetcode4044、层数最深叶子节点之和leetcode13025、最深叶节点的公共祖先leetcode11236、删除给定值的叶子节点1325...原创 2020-05-01 21:43:24 · 1670 阅读 · 0 评论 -
二叉树:序列构造
1、从前序与中序遍历序列构造二叉树leetcode105先序遍历的顺序是 root -> left -> right,中序:left -> root -> right,这就能方便的从根开始构造一棵树。 首先,preorder 中的第一个元素一定是树的根,这个根又将 inorder 序列分成了左右两棵子树。现在我们只需要将先序遍历的数组中删除根元...原创 2020-05-01 10:34:59 · 3480 阅读 · 0 评论 -
二叉树:先序、中序、后序、层次遍历
数据结构:二叉树的常见操作1、二叉树的创建2、二叉树的先序遍历:递归、迭代3、二叉树的中序遍历:递归、迭代4、二叉树的后序遍历:递归、迭代5、根据先序、中序生成二叉树6、根据中序、后序生成二叉树7、求二叉树的叶子节点之和8、求二叉树的叶子节点的父节点之和9、求二叉树的最大/小深度10、求二叉树的 正向/逆向 路径和...原创 2020-04-30 22:34:53 · 374 阅读 · 0 评论 -
如何判断单向链表中是否有环
例子:有一个单链表,其中可能有一个环,也就是某个节点的next指向的是链表中在它之前的节点,这样在链表的尾部形成一环。如图所示:问题一:如何判断一个链表是不是这类链表?问题二:如果链表为存在环,如何找到环的入口点?问题三:如果链表为存在环,环的长度又是多少?问题一方法:各种博客论坛网上提供了各种方法来判断链表是否存在环,总结起来就是两类:1、穷举遍历;2、快慢指...原创 2019-10-26 16:16:52 · 3701 阅读 · 2 评论