数据结构与算法
文章平均质量分 70
yiliyo
这个作者很懒,什么都没留下…
展开
-
Trie树(前缀树、字典树)
目录什么是前缀树前缀树的优缺点:前缀树的应用什么是前缀树Trie树,又叫字典树、前缀树(Prefix Tree)、单词查找树 或 键树,是一种多叉树结构。如下图:好比假设有b,abc,abd,bcd,abcd,efg,hii 这6个单词,那我们创建trie树就得到上图可以归纳出 Trie 树的基本性质:1. 根节点不包含字符,除根节点外的每一个子节点都包含一个字符。2. 从根节点到某一个节点,路径上经过的字符连接起来,为该节点对应的字符串。3. 每个节点的所有子节原创 2021-12-16 17:25:06 · 2839 阅读 · 0 评论 -
算法-前缀和数组、差分数组
nums[n] = {a1, a2, ...., an-1};preSum[n + 1] = {0, a1, a1 + a2, ...., a1+..+an-1};[i, j]之间元素的和(包括i, j):preSum[j+ 1] - preSum[i]原创 2021-11-04 16:19:03 · 1167 阅读 · 0 评论 -
数据结构-单调队列
239. 滑动窗口最大值//滑动窗口+单调队列(单调递减队列)//思路://单调递增队列中存储数组下标,下标是递增的,下标对应的值是递减的//窗口滑动时,当前元素若大于(或大于等于)队尾下标对应的值则循环出队尾,若当前队首下标在窗口外(队首下标小于等于left=i-k)则循环队首出队class Solution {public: // 滑动窗口 + 单调队列(单调递减队列) // 思路: // 单调递增队列中存储数组下标, 下...原创 2021-11-04 11:22:05 · 145 阅读 · 0 评论 -
拓扑排序-BFS-DFS
参考:算法学习笔记(53): 拓扑排序 - 知乎1,拓扑排序可以用来判环2,BFS解法中:有时会要求输出字典序最小的方案,这时把queue改成priority_queue即可,此时负责度会多一个log210. 课程表 II官网解答:力扣https://leetcode-cn.com/problems/course-schedule-ii/solution/ke-cheng-biao-ii-by-leetcode-solution/class Solutio...转载 2021-10-28 11:57:22 · 235 阅读 · 0 评论 -
算法之杂记
回文 1,reverse2,双指针3,栈 最长回文子串 1,中心扩展法leetcode5:https://leetcode-cn.com/problems/longest-palindromic-substring/原创 2020-08-09 21:09:00 · 177 阅读 · 0 评论 -
二分搜索模板
https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array/solution/er-fen-cha-zhao-suan-fa-xi-jie-xiang-jie-by-labula/转载 2020-04-10 00:02:11 · 515 阅读 · 0 评论 -
二叉树递归
111. 二叉树的最小深度(e)思路:(1)对一个cur其dep= 1 + min(leftdep,rightdep);(2)对一个nullptr,ifhasneighber,returnINT_MAX;elsereturn根据题意0or1;(3)递归类型:从下到上 // (1) 对一个cur 其dep = min(leftdep, rightdep); // (2) 对一个nullptr, if has neighber, r...原创 2021-08-28 16:57:13 · 918 阅读 · 0 评论 -
如何写递归
目录在实现递归函数之前,有两件重要的事情需要弄清楚:从下到上从上到下(尾递归)优化递归函数再谈由上到下、由下到上总结其余实战及练习题见开头链接出处出自:https://leetcode-cn.com/circle/article/koSrVI/编程语言中,函数 Func(Type a,……)直接或间接调用函数本身,则该函数称为「递归函数」。在实现递归函数之前,有两件重要的事情需要弄清楚:递推关系:一个问题的结果与其子问题的结果之间的关系。 基本情况(终止转载 2021-08-27 00:20:38 · 402 阅读 · 0 评论 -
二叉查找树
96. 不同的二叉搜索树思路:dp(1) 数组元素共i个元素[1,2,3,....,i]时, 以k为根节点的树,其左子树由[1....k-1]共k-1个元素构成,右子树由[k+1.....n]共i-k个元素构成,如下: k[1....k-1] [k+1......i]以k为根的bst树数量为:分别以[1.....k-1]为根的bst的数量 乘以 分别以[k+1.....i]为根的bst的数量。(2) 定义:f(i)是数组共i个...原创 2021-08-24 16:37:05 · 103 阅读 · 0 评论 -
二叉树构建
105. 从前序与中序遍历序列构造二叉树//Input:preorder=[3,9,20,15,7],inorder=[9,3,15,20,7]//Output:[3,9,20,null,null,15,7]思路: (1)前序的第一个是根(2)在中序中找到根。根据中序中的根和strat的distance,可以把前序和中序分为根、左半部[)和右半部[)三段(3)分治递归struct TreeNode { int val; TreeN...原创 2021-08-23 17:21:52 · 147 阅读 · 0 评论 -
二叉树遍历算法
栈注:1,三种遍历都是先把二叉树的最左结点循环入栈,以帮助找到返回处理的节点。每个子树也是先把该右子树中的最左节点循环入栈,以帮助找到返回处理的节点。先序遍历和中序遍历都是通过一个子树的最右下叶节点的right带出接下来的处理结点,表明该子树的左子树已经遍历处理完毕。因为不管先序遍历还是中序遍历,一颗子树的结束点是在该子树的最右下叶节点。2,先序和中序代...原创 2020-01-17 00:22:55 · 3376 阅读 · 0 评论 -
栈的基本用途
1,平衡符号2,后缀表达式计算值3,中缀表达式转后缀表达式(1)遇到数字输出(2)遇到符号, 若是左括号:直接入栈(此时尚未入栈的左括号优先级最高) 若是+-*/:若栈为空则直接入栈;若栈顶符号优先级大于等于当前符号则出栈并放到string,直到优先级小于当前符号或栈顶遇到左括号(此时栈中左括号优先级最低)为止 若是右括号:则符号依次出栈并放到string直到第一个左括号出栈为止为止注:纯标准中缀公式转后缀:stringtokens=...原创 2021-05-24 21:40:00 · 270 阅读 · 0 评论 -
回文判断_最长回文子串_分割回文串
目录一,判断是否回文二,最长回文子串一,判断是否回文leetcode 1251,双指针:左右指针分别向中间移动并判断字符相等。O(n), O(1)2,reverse:反转字符串并与原串判断串相等。O(n), O(n)需额外空间3,栈:字符串左半边顺序入栈。之后分别出栈并与右半边判断字符相等。O(n), O(n)需额外空间二,最长回文子串leetcode51,中心扩展法(暴力枚举)遍历,以每个元素为中间元素,同时向左右出发找回文串,对每轮找到的更长的回文串记录左右边原创 2021-05-23 16:35:41 · 140 阅读 · 0 评论 -
回溯算法解子集、组合、排序
转载labuladong:https://leetcode-cn.com/problems/subsets/solution/hui-su-si-xiang-tuan-mie-pai-lie-zu-he-zi-ji-wen-t/代码方面,回溯算法的框架:result = []def backtrack(路径, 选择列表): if 满足结束条件: result.a...转载 2020-04-19 20:26:04 · 756 阅读 · 0 评论 -
算法滑动窗口
转载labuladong:https://leetcode-cn.com/problems/minimum-window-substring/solution/hua-dong-chuang-kou-suan-fa-tong-yong-si-xiang-by-/%E5%8F%8C%E6%8C%87%E9%92%88%E6%8A%80%E5%B7%A7.md注:1,输入两个字符串的,需要needs和window两个hash计数器。输入为一个字符串的只需要一个window计数器。2,shr.转载 2020-08-13 21:59:43 · 2186 阅读 · 0 评论 -
算法-搜索
广度优先搜索算法思想广度优先搜索算法(Breadth-First-Search,BFS),又称宽度优先搜索。作为最简便的图的搜索算法之一,是很多重要图算法的基本原型,如Dijkstra最短路径算法和Prime最小生成树算法。其核心思想是:从初始节点开始,应用产生式规则生成第一层节点,检查目标节点是否在这些后继节点中,若没有,则再用产生式规则将第一层所有节点逐一扩展,得到第二层节点,并逐...原创 2020-04-23 08:38:03 · 912 阅读 · 0 评论 -
回溯-子集_组合_排序_练习
组合:leetcode17(中等):电话号码的字母组合class Solution {public: vector<string> letterCombinations(string digits) { vector<string> result; if (digits.size() == 0) { ...原创 2020-04-20 09:03:40 · 287 阅读 · 0 评论 -
单调栈-处理Next Greater Element问题
转载https://labuladong.gitbook.io/algo/shu-ju-jie-gou-xi-lie/dan-tiao-zhan栈(stack)是很简单的一种数据结构,先进后出的逻辑顺序,符合某些问题的特点,比如说函数调用栈。单调栈实际上就是栈,只是利用了一些巧妙的逻辑,使得每次新元素入栈后,栈内的元素都保持有序(单调递增或单调递减)。听起来有点像堆(heap)?不是的,单调栈用途不太广泛,只处理一种典型的问题,叫做 Next Greater Element。本文用讲解单调队转载 2020-08-11 19:30:13 · 217 阅读 · 0 评论