2653. 滑动子数组的美丽值;787. K 站中转内最便宜的航班(1928. 规定时间内到达终点的最小花费);1245. 树的直径(2246. 相邻字符不同的最长路径)

2653. 滑动子数组的美丽值

核心思想:维护一个长度为k的数组,我们用cnt来统计这个数组中值的个数,第 x小的数意味着,我们减去一个数的数值发现x小于等于0了,说明这个数就是第x小的数,然后我们枚举负数的时候从最小开始枚举即可,这题因为题目的给数据范围原因可以用这种方法。

2653. 滑动子数组的美丽值;787. K 站中转内最便宜的航班(1928. 规定时间内到达终点的最小花费);1245. 树的直径(2246. 相邻字符不同的最长路径)_第1张图片

 787. K 站中转内最便宜的航班(1928. 规定时间内到达终点的最小花费)

核心思想:这是个模板题,就是对于一个没有自环的一个地图,问你经过k条边的最短路径是多少。解题方法就是动态规划dp[t][end] = dp[t-1][start],dp[t][end],t代表边数。(1928是双向的,所以写两次就行了)

2653. 滑动子数组的美丽值;787. K 站中转内最便宜的航班(1928. 规定时间内到达终点的最小花费);1245. 树的直径(2246. 相邻字符不同的最长路径)_第2张图片

 2653. 滑动子数组的美丽值;787. K 站中转内最便宜的航班(1928. 规定时间内到达终点的最小花费);1245. 树的直径(2246. 相邻字符不同的最长路径)_第3张图片

 1245. 树的直径(2246. 相邻字符不同的最长路径)

核心思想:树形DP模板题,核心思想用一个tmp维护以当前节点作为转折点的最长链长不断更新它,然后去统计结果,这两个题的区别就是一个数的根是不确定的,所以多了一个fa,一个树的根已经确定了是0,所以就不用再去判断了,然后第二个代码有个误区,就是dfs(y)+1要不要放在if中,不放在if中是因为就算x和y相等了,但是它的子串有可能形成最长的满足要求的链,所以要把它放在if外面,第一个放在if里面是因为这个路径已经不满足要求了,因为相当于走了重复的路径了,所以放在if里面。

2653. 滑动子数组的美丽值;787. K 站中转内最便宜的航班(1928. 规定时间内到达终点的最小花费);1245. 树的直径(2246. 相邻字符不同的最长路径)_第4张图片

 

2653. 滑动子数组的美丽值;787. K 站中转内最便宜的航班(1928. 规定时间内到达终点的最小花费);1245. 树的直径(2246. 相邻字符不同的最长路径)_第5张图片

你可能感兴趣的:(算法)