C++算法
文章平均质量分 76
介绍一些算法思路,提供题解
笨笨胡小巴
小小怪
展开
-
【C++算法】BFS解决多源最短路问题相关经典算法题
这道题目如果我们按照每次遍历数组每次遇到1就去bfs,肯定是会超时的,但是根据这个写法也有不超时的做法,我们遍历的时候,遇到1就去bfs,并将途中遇到1的位置标记一下,下一轮遇到1的时候,先dfs一下,如果这次dfs宽搜的时候遇到1,发现这个位置已经标记过,此时就不要bfs了,直接就是上次的结果,但是这样写需要两次dfs,并且dsf的代码还不一样,也比较麻烦,那我们来一个新思路:正难则反,我们可以从边上的 1 开始搜索,把与边上 1 相连的联通区域全部标记⼀下;但是如何将这个源点当作一个超级源点呢?原创 2024-05-20 21:56:30 · 303 阅读 · 1 评论 -
【C++算法】BFS解决单源最短路问题相关经典算法题
我们利层序遍历来解决最短路径问题,是最经典的做法。我们可以从起点开始层序遍历, 并组在遍历的过程中记录当前遍历的层数。首先我们看到这个题目,真的是难从下手,既然我们这章是最短路径,我们可以尝试从这方面来考虑考虑,我们可以考虑尝试来转化一下哈。首先我们可以将这道题目简化一下,可以往我们这一章的主题上面来想想。原创 2024-05-19 10:54:30 · 223 阅读 · 1 评论 -
【C++算法】BFS解决FloodFill算法相关经典算法题
首先我们来看看这道题目,我们可以肯定的是这个可以利用上面的图像渲染来做这道题目,但是呢?我们这道题目有点现在,在边界的情况下我们是不能修改的,但是也能做,我们第一遍bfs的时候,不修改里面的值,只遍历到那些边界的情况记录下来,第二次bfs的时候如果遇到上次边界的情况,我们就不修改,如果没有我们就修改,但是太麻烦了,我们有没有更简单的做法呢?原创 2024-05-16 19:45:44 · 152 阅读 · 1 评论 -
【C++算法】堆相关经典算法题
如果还有剩余,就将剩余的石头继续放在原始的石堆里面重复上面的操作,直到石堆里面只剩下一个元素,或者没有元素(因为所有的石头可能全部抵消了),那么主要的问题就是解决:如何顺利的拿出最大的石头以及次大的石头;我们一看到这个就会说,这行呀!我相信找第K大元素,就能想到TopK问题,兄弟们应该能立马想到「堆」, 这应该是刻在骨子里的记忆,只不过我们要知道找第K大元素我们需要建立小堆,我们要想想,如果我们弄一个大堆,如果第一个元素就是数组中最大的元素,那么此时其他元素如何入堆,哪还找什么第k的元素呢?原创 2024-05-15 17:31:36 · 313 阅读 · 0 评论 -
【C++算法】队列相关经典算法题
这道题相较于上面三道题就有点难度了,这个题目男难就难在处理空节点,既然统计每一层的最大宽度,我们优先想到的就是利用层序遍历,把当前层的结点全部存在队列⾥面,利用队列的常度来计算每一层的宽度,统计出最大的宽度。其实这道题我们也可以用数组来实现,但是这时候有人说了此时我们会经常进行删除节点,而删除节点都是头删,而数组的头删效率较低,你咋还使用我们的数组呢?内存限制,那么此时我们的编号是2的1500次方,那么肯定会越界,此时无论什么数据类型我们都存不下,但是这个题最后我们是会进行减法的,亿个空节点,会超过最。原创 2024-05-11 21:50:14 · 864 阅读 · 1 评论 -
【C++算法】栈相关经典算法题
这个题目很有乐趣,解决这道题目我们对这个字符串要纵向看它,此时如果相邻的字符相同,比如我们上面的[b]和[b],我们就可以把它消灭,然后这两个被消除的字符的上面字符[a]往下掉落,然后这个字符又有相邻相同的字符[a],我们又可以它消灭,很像我们玩过的开心消消乐游戏,只不过我们这里的是两个字符相同就满足消消乐,回归本题,既然要纵向看它,此时我们的数据结构就只有栈符合这个条件,当前元素是否被消除,需要知道上⼀个元素的信息,可以⽤栈来保存信息。自然是遇到一个元素等于当前的出栈序列的元素,那我们就让它出栈。原创 2024-04-27 21:56:42 · 635 阅读 · 0 评论