![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法学习
文章平均质量分 81
我咋就看不懂
这个作者很懒,什么都没留下…
展开
-
算法阅读笔记8
目录动态规划斐波那契 动态规划 明确状态,明确选择,明确dp函数/数组定义,明确base case 状态:会变的,dp数组的索引 选择:求最值 定义:状态转移方程 #初始化base case dp[0][0][...]=base #进行状态转移 for 1 in 1的所有取值: for 2 in 2的所有取值: for ... dp[1][2][...]=求最值(选择1,选择2,...) 斐波那契 用常规的方法会达到O(2^n)级别。炸了,因此需要引入动态规划的思想,备忘录的递归。常规的递归可原创 2021-06-26 17:50:02 · 68 阅读 · 0 评论 -
leetcode乱
目录leetcode783 二叉搜索树最小距离 leetcode783 二叉搜索树最小距离 暴力无脑解法,中序遍历二叉树得到递增数组,比较相邻两个差值与最小值,更新最小值即可 class Solution { public: vector<int> num; int min=1e5; void helper(TreeNode* root){ if(root==NULL) return ; helper(root->left);原创 2021-04-22 18:00:42 · 84 阅读 · 0 评论 -
算法阅读笔记7
目录3.24图并查集并查集可以解决连通分量个数 图 邻接链表是一种链式存储结构,其为图的每个顶点建立一个单链表,第 i 个单链表 中保存与结点 Vi 相邻的所有结点(无向图)或所有以结点 Vi 为弧尾的弧指向的结点(有 向图)及其相关信息。 总之就是i指向j,那么在i的链表下就有j的值。维护一个vector<edge> Edge[N] 二维的数组,代表 每个节点的后面跟的数组,里面存放相当于链表的东西 并查集 这种数据结构用来表示集合信息,用以实现如确定某个集合含有哪些元素、判断某 两个元素是否原创 2021-04-13 18:20:13 · 97 阅读 · 0 评论 -
算法阅读笔记6
目录03.20BSTII二叉树转累加树判断二叉搜索树的合法性。在BST中寻找一个数插入一个数BST删除一个数几个题。验证BST BSTII 继续上上次的二叉树。上次看到二叉搜索树,看了一道BST转换累加树的题。 二叉树转累加树 每个节点的值要更新成为比他大的节点的值的加和。相当于计算当前节点右子树的和,首先按照特性中序遍历BST就能得到升序排序,那反过来先遍历右子树不就得到降序了吗。类似的,先遍历右子树,然后累加和,加起来之后赋值给根节点就结束了。代码如下就几行。 class Solution { pub原创 2021-03-23 15:21:00 · 153 阅读 · 0 评论 -
算法阅读笔记5
目录%运算 %运算 在有些题里面a%b往往让人算不明白, a%b语句为例,若a为正数,则该表达式结果必为非负数 (可能为 0); 若a为负数,则表达式结果必为非正数 (可能为 0)。 而表达式结果与 b 的符号没有直接关系,即 a% -b 与 a%b 的结果相同 。 我们利用求模运算来计算数组下标,而负数组下标是不能被我们所使用的。 那么我们必须保证表达式求得的余数在数论定义的区间范围内。结合例 2.4中的方法,相信很多读者心中都有答案,只需在该负的余数上加上除数再对除数求 一 次余即可 。 ...原创 2021-03-20 20:07:58 · 117 阅读 · 0 评论 -
算法阅读笔记4
目录二叉树II最大二叉树 二叉树II 最大二叉树 这个题首先要根据给定的数组找最大值然后递归。这里递归的时候注意一个事情递归一定要有结果,最后是一定要返回东西的,否则没有终止条件递归会一直进行。通过遍历数组直接刷到最大值,然后以这个值为根节点(最大),左边的数组部分当作左节点,右边的当作右节点,递归上述操作直到最后左右两边的数组为空,代表数组中已经没有东西了,返回NULL。 这个思路运行时和内存都较大。 class Solution { public: TreeNode* constructMaxi原创 2021-03-14 19:06:07 · 104 阅读 · 0 评论 -
算法阅读笔记3
栈 计算表达式比较难,尤其是带括号的,总体上先给一个判断运算符优先级规则的函数,然后定义数据栈和运算符栈,从左到右扫整个字符串,碰到左括号、运算符压栈,数字压数字栈,如果有左括号,则开始找右括号,找到右括号之后开始出栈,出站规则和正常一样,但是直到匹配到左括号出栈为止;正常情况碰到运算优先级更高的运算符就弹出两个数字和该运算符运算,得到结果压入数字栈,循环直至栈中只剩一个数字。 计算表达式 这个题的各种精度问题太恶心,一定用double来搞 labuladong给的思路 #include<algori原创 2021-03-09 20:04:46 · 111 阅读 · 0 评论 -
算法阅读笔记2
首先是补的上节排序的一道题,有小坑。只需要注意他的输入是连续的,即一个测试样例有若干个实例,发现这个问题很简单。 例题:成绩排序 #include<iostream> #include<algorithm> #include<string.h> #include<vector> using namespace std; struct students{ string name; int score; int order; }; stud原创 2021-03-08 21:23:35 · 98 阅读 · 0 评论 -
算法阅读笔记1
第二章 这一章还是基础入门 1 排序 while(scanf("%d",&n)!=EOF) 这句话代表的意思是不知道最终会有多少数据输入,因此这句话可以自动检测输入。 sort函数里面的参数分别是排序内存的起始地址和终止地址,不要写错。默认是升序排列,如果需要降序则重写一个排序函数。 bool cmp(int a,int b){ return a>b; } 这个排序函数支持的类型有很多,可以排列结构体数组等其他数据结构,而且如果待排的值相同需要比较另外的值,则可以写if(a==b)r原创 2021-03-07 19:12:39 · 94 阅读 · 0 评论