代码随想录--数组--二刷总结篇(C++)ACM模式 思路上有问题的是209长度最小的子数组,没想到滑动窗口的思路代码有问题的是螺旋矩阵,思路是根据轮次确定每条边的开始数字和结束数字,//从右下到左下这条边需要的是是行数–写出++;
代码随想录算法训练营14期-第十章 单调栈 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。这里使用单调递增栈来存储下标,当元素大于栈顶元素时弹出直到栈空或者不满足元素大于栈顶时退出;
【代码随想录算法训练营14期】-动态规划 有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:如果 x == y,那么两块石头都会被完全粉碎;如果 x!= y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。最后,最多只会剩下一块 石头。返回此石头 最小的可能重量。如果没有石头剩下,就返回 0。
【代码随想录算法训练营14期】-Day18 第六章 二叉树 part05 查找最左下角的值,第一次理解到遍历全局变量,则引用地址&路径总是在递归查找叶节点前序遍历中序遍历分割时创建数组使用 rightPre(preorder.begin() + leftIn.size() + 1, preorder.end());
【代码随想录算法训练营14期】- day 17 第六章 二叉树part04 二叉树递归函数如果有返回值,那么遍历时要return返回值;递归函数没有返回值,答案加入数组,传递数组地址&,不需要return,直接运行函数对于第三个左叶子节点,因为返回值每次都是0return,故需要把ans放入return中,相当于每次递归都是ans+0+0;最后累计;
【代码随想录算法训练营14期】-Day15 第六章 二叉树 part02 层次遍历,使用队列暂存元素,计算每层节点数量,分层遍历节点,每遍历一个节点,存入数组,弹出队列,并把左右非空儿子加入队列;翻转二叉树前后序递归均可对称二叉树,递归检验左右子树,首先判断节点存在性,再判断值相同性。
【代码随想录算法训练营14期】-Day14- 第六章 二叉树part01 递归法递归法遍历使用数组记录遍历顺序,前序push,left,right;中序left,push,right,后序left,right,push;迭代法迭代法使用栈的特点,前序遍历一个节点就push,判断左右是否为空,不为空放入栈(先进后出,所以先右后左儿子);后序遍历为中右左,反转数组为中左右;中序遍历因为push和遍历不是同步的,故用额外指针cur遍历,遍历的节点都存入栈,一直遍历左儿子,节点为空时,取出栈头(根)节点push,遍历右儿子…直到栈为空而且cur也空才停止。
【代码随想录算法训练营14期】Day13- 第五章 栈与队列part03 优先队列priority_queue:优先队列,本质是堆实现。与队列不同的是,priority_queue只能访问队列头部的信息(使用top),且插入元素后,会自动排序。基本操作top(): 访问队头元素empty(): 队列是否为空size():返回队列内元素个数push():插入元素到队尾 (并排序)emplace():原地构造一个元素并插入队列pop():弹出队头元素swap():交换内容定义Type :优先队列中元素的数据类型。
【代码随想录训练营14期】Day9-第四章 字符串part02 kmp算法精髓就是next数组的生成,next数组给出两个字符不相同的时候子字符串下一步到的位置,生成next数组,就是查找最长相同前后缀的长度,使用指针i循环(i指向后缀末尾理解后缀子串末尾),j是前缀末尾,如果i和j字符相同,那么j可以往后移位即j++,i++;如果i和j不同那么j要一直回退,回退到i和j字符串相同或者起始位置。