题目链接 https://www.luogu.com.cn/problem/P1144 思路 我们用一个ans数组存储我们从源点到当前点的路径条数,那么我们发现如果我们能进行松弛操作,我们当前的最短路路径就可以从上一个点继承过来即 a n
递归 先解决空 在规定子递归项目 最后是现在怎么操作现在 【二者可以交换】 最后返回传递给父递归 广度有限遍历 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0),
P2617 #include<cstdio> #include<vector> #include<iostream> #include<algorithm> using namespace std; const int MAXN=1e5+5; int n,m,Ans[MAXN<<2],cg[MAXN<<2],tot,va[MAXN<<2],b[MAXN<<2],c1; struct SG{ int l,r,s
题目链接 题目大意 就是给你一个\(n*m\)的矩阵,你每次可以对一个\(2*2\)的方格染色变成\(k\),要求你最多染\(n*m\)次后,变成矩阵的样 子,每个点可以重复染色 题目思路 这个题目就是会覆盖导致问题不好解决 那么就考虑逆向染色那么就不会覆盖+bfs就可以解决此问题,具体看代码 代码 #incl
题面链接 https://www.acwing.com/problem/content/description/852/ 思路 和朴素版的Dijkstra类似,只不过我们对边的存储进行堆优化,优先将短的边先更新(基于贪心策略) 代码 #include<bits/stdc++.h> using namespace std; //----------------自定义部分---------------- #defin
算法-二叉树:二叉树的最大深度 求一颗二叉树的最大深度,根节点的深度为1。 思路解析: 构造二叉树时,一般选择前序遍历;求普通二叉树的属性,一般选择后序遍历;求二叉搜索树的属性,一般选择中序遍历。 注意:对于普通二叉树单纯求深度使用前序遍历就行。 //方法一:递归 int height(TreeNod
title: "bfs+模拟" author: Sun-Wind date: February 2,2022 水一道绿题,整体思路和八数码很像,哈希表存解,然后常规模拟即可 #include<iostream> #include<utility> #include<queue> #include<string> using namespace std; typedef long long ll; #define fi(i,a,b) f
思路 原题链接 本题的思路与上一题 二叉树的层序遍历相似,实际就是将上一题的结果进行翻转即可注意:当开始调用checkfun函数的时候,首先要将队列定义出来,然后将node结点加入到队列que中que中直接加入node结点, tempNode中加入的事que.poll(),itemList是一个列表,在其中加入的是,temp
题目链接 题目思路 这个题目的思路就是连\(1,j\)一个长度为\(x\)的边 其实就是有个中转点 \(dep[i]=min(dis[1][i],dis[i][j]+x)\) 那么如果\(x\leq dis[1][i]-dis[i][j]\;dep[i]=dis[i][j]+x\) 反之亦然 对于中转点利用双指针的思想写写 说的感觉好差,看代码可能可以看懂 代码 #in
2022-01-27每日刷题打卡 飞书——每日一题 面试题 17.21. 直方图的水量 给定一个直方图(也称柱状图),假设有人从上面源源不断地倒水,最后直方图能存多少水量?直方图的宽度为 1。 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的直方图,在这种情况下,可以接 6 个单位的水(蓝色部分
今天又学会了一个题,想和大家分享一下 题目见下: 给定一棵包含 N 个节点的完全二叉树,树上每个节点都有一个权值,按从 上到下、从左到右的顺序依次是 A1, A2, ··· AN如下图所示: 现在小明要把相同深度的节点的权值加在一起,他想知道哪个深度的节点 权值之和最大?如果有多个深度的
2022-01-26每日刷题打卡 飞书——每日一题 494. 目标和 给你一个整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 ‘+’ 或 ‘-’ ,然后串联起所有整数,可以构造一个 表达式 : 例如,nums = [2, 1] ,可以在 2 之前添加 ‘+’ ,在 1 之前添加 ‘-’ ,然后串联起来得到表
2022-01-17每日刷题打卡 一本通 1255:迷宫问题 【题目描述】 定义一个二维数组: int maze[5][5] = { 0,1,0,0,0, 0,1,0,1,0, 0,0,0,0,0, 0,1,1,1,0, 0,0,0,1,0, };它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的
class Program { static void Main(string[] args) { Queue<Person> que = new Queue<Person>(); que.Enqueue(new Person("11", 1)); //新增 que.Enqueue(new Person("22", 2)); q
给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配。 '.' 匹配任意单个字符 '*' 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/regular
# 637. 二叉树的层平均值 #也不是一层一层输出,每层只有一个平均值 # 求层平均值,需要记录下每层结点的数目 #另外除法需要注意取整的问题 # Definition for a binary tree node. # class TreeNode(object): # def __init__(self, val=0, left=None, right=None): #
111.二叉树的最小深度 解题思路 辅助队列 层数计数器dep 叶子节点的判断即为判断该节点是否有左右子树。 没有左右子树时说明为叶子节点,说明为最小深度,直接return 代码 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *le
层序遍历的应用: 移步->LeetCode 111. 二叉树的最小深度 移步->LeetCode 104. 二叉树的最大深度 移步->LeetCode 102. 二叉树的层序遍历 移步->LeetCode 226. 翻转二叉树 题目链接-LeetCode 111. 二叉树的最小深度 递归法思路: 注意这里有一个陷阱。 上图,左子树为空,最小深度不
题目:637.二叉树的层平均值(Easy) 给定一个非空二叉树, 返回一个由每层节点平均值组成的数组 思路 这题是在求解过二叉树的层序遍历之后,在来解决这道题就比较容易; 注意返回值是double; 代码 C++ 版本 /** * Definition for a binary tree node. * struct TreeNode { * int v
题目:199. 二叉树的右视图 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 思路 代码 C++ 版本 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNo
1 #include <iostream> 2 #include <vector> 3 #include <queue> 4 using namespace std; 5 6 void Print(const vector<int> &v) 7 { 8 for(auto it:v) 9 { 10 cout<<it<<" "; 11 } 12
描述 给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替) 数据范围:0 \le n \le 15000≤n≤1500,树上每个节点的val满足 |val| <= 100∣val∣<=100 要求:空间复杂度:O(n)O(n),时间复杂度:O(n)O(n) 例如: 给定的二叉树是{1,2,3,#,#,4,5} 该二叉
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Codec { // Encodes a tree to a single string. // 层序遍历 (遍
二叉树的广度优先遍历(按层遍历) (1)层序遍历,输出到一行;使用队列,先进先出 示例:【输出】1 2 3 4 5 6 7 void levelOrder(TreeNode* head){ queue<TreeNode*> que; if(head != NULL){ que.push(head); } while(!que.empty()){ TreeNode* cur = qu
一、模拟 const int N = 1e5 + 10; int hh = 1, tt = 0; int que[N]; //队尾插入x que[++tt] = x; //返回队尾元素 que[tt]; //返回队头元素 que[hh]; //弹出对头 hh++; //检查是否非空 hh > tt ? YES : NO; //队列长度 tt - hh; 二、STL #include<bits/stdc++.h> using