数据结构和算法
计算数据结构相关知识:线性表,链表,树,图等。
算法:双指针,动态规划,dfs, bfs等。
乐KO烦
这个作者很懒,什么都没留下…
展开
-
红黑树
红黑树规则:节点只有黑色和红色,根节点必须为黑色,叶子节点为空节点且必须为黑色,不能有连续的红色节点,红色节点的父亲节点不能为红色。从任意一个节点出发到叶子节点的所有路径中经过的黑色节点数目相等。(平衡二叉树是高度差不能超过1,红黑树不能保证平衡二叉树一样完全的平衡)操作:变色插入节点为红色,自底向上变换节点颜色,满足规则2,“平衡”:节点到叶子节点的所有路径中黑色节点数目相同。a. 插入节点21颜色为红色。b. 颜色变换,不算上空节点,三层颜色变换达到一个符合规则2局部红原创 2020-12-23 21:34:49 · 68 阅读 · 0 评论 -
带有返回值和没有返回值的递归区别
1、当使用带有返回值得递归时,适用于返回值能代表确切含义的情况。//求二叉树高度,返回左右子树高度。int getDepth(TreeNode *root){ if(root) return 0; // 树为空返回0 int left = getDepth(root->left); int right = getDepth(root->right); return 1 + max(left, right);}int getDepth(TreeNode *root){ if(ro原创 2021-11-26 17:18:29 · 2035 阅读 · 0 评论 -
dfs& 加起来和为目标值的组合&有重复项数字的所有排列
两区别的dfs:都是每个值只能使用一次,和为目标值不用使用全部。和为目标值,会根据有序的元素不同开头进行dfs所有序列,需要对每一个元素进行dfs,还要标记是否访问。对于重复元素需要判断同一层的dfs 重复元素 只需要dfs一次需要判断。加起来和为目标值的组合输入:[100,10,20,70,60,10,50],80返回值:[[10,10,60],[10,20,50],[10,70],[20,60]]说明:给定的候选数集是[100,10,20,70,60,10,50],目原创 2021-09-27 20:22:52 · 155 阅读 · 0 评论 -
集合的所有子集&重写sort&dfs搜索
现在有一个没有重复元素的整数集合S,求S的所有子集注意:你给出的子集中的元素必须按升序排列。给出的解集中不能出现重复的元素。数据范围:,集合中的任意元素满足。要求:空间复杂度 ,时间复杂度。示例1输入:[1,2,3]返回值:[[],[1],[2],[3],[1,2],[1,3],[2,3],[1,2,3]]示例2输入:[]返回值:[]class Solution {public: vector<vector<int> > an原创 2021-09-27 22:00:47 · 83 阅读 · 0 评论 -
求解最小机器重量(回溯法/分支限界)
求解最小机器重量(回溯法/分支限界)回朔法:从后往前记录全局最优解(最小价值,最小重量,尽管他们不是同一个物品上的,最大程度贪心),因为采用DFS深度优先,会马上得到一个结果,然后比较当前选择的重量,价值+在最程度贪心下的最小重量和价值,是否小于给定条件(价值)和已经得到的最小结果值。分支限界:采用优先队列(堆)根据条件设置优先级,找到的第一个结果即为答案,重点找到一个好的限界函数。从全局出发,每次选择一个物品后,算出最大程度贪心取得的最小重量,以此来排序。(如果用已经选择的重量&价值来排序,原创 2021-04-10 20:49:55 · 1248 阅读 · 2 评论