【动态规划】两个数组的 dp 问题二

两个数组的 dp 问题

  • 1.正则表达式匹配
  • 2.交错字符串
  • 3.两个字符串的最小ASCII删除和
  • 4.最长重复子数组

在这里插入图片描述

点赞👍👍收藏🌟🌟关注💖💖
你的支持是对我最大的鼓励,我们一起努力吧!😃😃

1.正则表达式匹配

题目链接: 10. 正则表达式匹配

题目分析:

在这里插入图片描述

在这里插入图片描述

算法原理:

经验 + 题目要求

dp[i][j] 表示:p[0, j] 区间内的子串能否匹配 s[0, i] 区间内的子串

在这里插入图片描述

2.状态转移方程

根据最后一个位置的状况,分情况讨论

p[j] 属于 {a-z},如果 i 位置 和 j 位置字符相等,并且 s [0, i - 1]能被 p[0, j -1] 匹配上,那 [0, i] 就能被 [0, j] 匹配上

在这里插入图片描述

p[j] == ‘.’ ,'.'可以匹配任何单个字符,因此只用去看s [0, i - 1]能否被 p[0, j -1] 匹配上

在这里插入图片描述
p[j] == ’ * ‘,( ’ * ’ 匹配零个或多个前面的那一个元素。)’ * ’ 单独使用是没有意义的,它必须要和前面字符搭配起来使用。前面 j -1 位置字符有两种情况,要么是 {a - z}、要么是 ‘ . ’。

j - 1 位置字符是 ‘ . ’,相当于字符串是 " .* ",可以是空串, 可以是一个 ‘ . ’,可以是两个 ‘ . ’

如果是空串,我们就看dp[i][j-2]

在这里插入图片描述
如果p[j]匹配1个字符,我们就看dp[i-1][j-2]

在这里插入图片描述

如果p[j]匹配2个字符,我们就看dp[i-2][j-2]

在这里插入图片描述

dp[i][j] 时间复杂度就是O(N^2),在加上p[j] == ’ * ',时间复杂度就是O(N^3)了。想个办法看看p[j] == ’ * ',能否由若干个有限的状态表示。

优化:
第一种方法:数学

p[j] == ‘*’,有这么多种情况,只要有一种情况为真就可以了,所以我们可以得到下面的等式。发现 j -2是不变的,让等式所有 i 都减1。然后就可以进行替换了。

在这里插入图片描述

第二种方法:根据状态表示以及实际情况,优化状态转移方程

p[j] == ‘*’,找到dp[i][j]。

当j位置是 ‘ * ’ ,注意 j-1 位置 ‘.’,然后对 " .* " 进行分析。

如果 " .* ",去抵消 i 位置,然后保留 " .* ",我们得到一个状态。可能会有疑问,我们这个组合分明可以干掉很多个,为什么干得一个之后保留只有这一种情况。其实在dp[i-1][j]状态里面,这个组合会继续尝试干掉i-1,因为这个状态里面p[j]依旧等于
‘ * ’。相当于这个状态已经帮我们做了下面的事情。

在这里插入图片描述

还有一种情况,如果 " .* " 匹配空串,相当于就是把这个组合舍去。

在这里插入图片描述

至此p[j] == ’ * ',j - 1 位置 是 ‘ . ’,情况我们才说完

在这里插入图片描述

当p[j] == ’ * ',j - 1 位置 是 {a-z}。

这里我们按照优化第二种方法分析:

" _* “,去匹配空串,相当于把” _* "舍去,

在这里插入图片描述

" _* ",去匹配一个,然后保留。不是说想匹配就去匹配,前提条件必须满足 s[i] == p[j-1] 才会有 dp[i-1][j]。

在这里插入图片描述

虽然我们状态转移方程情况这么多。但是我们可以总结一下:

在这里插入图片描述

3.初始化

  1. 引入空串
  2. 里面的值要保证后序的填表是正确的
  3. 下标的映射关系

dp表上面多加一行表示s是空串,左边多加一列表示p是空串。接下来看看里面值应该填什么。

在这里插入图片描述

当 s 是空串,p也是空串,肯定能匹配上,所以第一行第一个格子是true

在这里插入图片描述
当s 是空串,但是 p 不是空串的话,注意 " _* ‘"可以匹配空串。现在就要对p的字符串就行讨论,然后初始化第一行后面的位置,如果s是空字符串,p字符串 前面如果出现’ _* ‘ 可以匹配空串,但是 ’ _* ‘ 之后出现 " __ ",后面不管有多少个’ _* '都不能匹配了。

在这里插入图片描述

现在考虑第一列,如果p是空串,s也是空串,肯定能匹配,所以第一列第一个空格还是true。

后续如果 p 是空串,s不是空串,肯定匹配不上,所以第一列后续都是false

在这里插入图片描述
下标映射有两种方法:

  1. dp表多加一行一列整体向右下移动一位,如果要回原表需要 i -1,j -1 才行
  2. s = ’ ‘ + s,字符串前面加一个辅助字符,这样字符串字符就和dp表一一对应了。

4.填表顺序

从上往下填写每一行,每一行从左往右

5.返回值

dp[i][j] 表示:p[0, j] 区间内的子串能否匹配 s[0, i] 区间内的子串。题目要求是整个字符串,因此返回dp[m][n],m是s的长度,n是p的长度

class Solution {
public:bool isMatch(string s, string p) {// 1.创建 dp 表// 2.初始化// 3.填表// 4.返回值int m = s.size(), n = p.size();vector<vector<bool>> dp(m + 1, vector<bool>(n + 1));s = ' ' + s, p = ' ' + p;dp[0][0] = true;for(int j = 2; j <= n; j += 2)if(p[j] == '*') dp[0][j] = true;else break;for(int i = 1; i <= m; ++i)for(int j = 1; j <= n; ++j)if(p[j] == '*')dp[i][j] = dp[i][j - 2] || (p[j -1] == '.' || p[j - 1] == s[i]) && dp[i - 1][j];elsedp[i][j] = (s[i] ==  p[j] || p[j] == '.') && dp[i - 1][j -1];return dp[m][n];        }
};

2.交错字符串

题目链接:97. 交错字符串

题目分析:

在这里插入图片描述

单看叙述很难理解,接下来我们借用例子理解一下。
这道题的意思是我们可以把字符串拆成若干份,然后把若干份拼接成s3。
比如下面先把s1拆分为aa,s2拆分成dbbc,在把s1剩余拆分为bc,在把s2剩余拆分a,在把s1剩余拆分为c。就能拼接成s3.

在这里插入图片描述

注意空串是有意义的。

在这里插入图片描述

算法原理:

之前做的字符串问题最多也就是两个字符串,但这道题出现了三个字符串,分别是s1、s2、s3。那之前的经验还能用吗?我们之前的经验是在两个字符串里面各选一段区间作为研究对象来研究问题。这三个字符串怎么办呢?其实我们依旧可以这个经验。我们选取s1、s2区间之后我们想把两个区间拼接形成s3。我们其实已经知道s1字符串长度,s2字符串长度了,那s3字符串长度其实也就固定了。也就是说当我们选取s1区间、s2区间,s3区间就已经被确定了。因此也可以用之前的经验 + 题目要求,来定义状态表示。

这里我们预处理一下,让字符串下标从1开始,这样等下下标对应就会非常简单。

在这里插入图片描述

1.状态表示

经验 + 题目要求

dp[i][j] 表示:s1中 [1,i] 区间内字符串以及 s2中 [1,j] 区间内字符串,能否拼接凑成 s3 [1,i+j]区间内的字符串

在这里插入图片描述

  1. 状态转移方程

根据最后一个位置的状况,分情况讨论

最后一个位置我们来看看这个s3,如果s1、s2能够交错拼成s3,那s3最后 i+j 位置元素, 要么等于 s1 最后 i 位置元素,要么等于 s2 最后 j 位置元素。要么都不相等。如果都不相等那就不用管了,创建dp时就已经处理了 。我们只研究能匹配的情况。

如果s1[i] == s3[i+j],我们还需要去看 s1[1,i-1] 和 s2[1,j] 区间能否拼接s3[1, i+j-1],正好是dp[i-1][j]

在这里插入图片描述

如果s2[j] == s3[i+j],和上面一样

在这里插入图片描述

3.初始化

  1. 引入空串
  2. 里面的值要保证后序的填表是正确的
  3. 下标的映射关系

dp表上面多加一行表示s1是空串,左边多加一列表示s2是空串。接下来看看里面值应该填什么。

s1是空串,s2是空串,i+j = 0,s3也是空串。空串和空串是可以拼接凑成空串的。所以第一行第一个位置填true

在这里插入图片描述

s1是空串,s2不是空串,s3也不是空串,如果s2字符串能够对应上s3,填ture,如果有一个字符不能对应,后面都填false

在这里插入图片描述
s2是空串,s1不是空串,s3也不是空串,同理如果s1字符串能够对应上s3,填ture,如果有一个字符不能对应,后面都填false

在这里插入图片描述

4.填表顺序

从上往下填写每一行,每一行从左往右

5.返回值

dp[m][n]

class Solution {
public:bool isInterleave(string s1, string s2, string s3) {// 1.创建 dp 表// 2.初始化// 3.填表// 4.返回值int m = s1.size(), n = s2.size();if(m + n != s3.size()) return false;s1 = ' ' + s1, s2 = ' ' + s2, s3 = ' ' + s3;vector<vector<bool>> dp(m + 1, vector<bool>(n + 1));//第一行初始化dp[0][0] = true;for(int j = 1; j <= n; ++j)if(s2[j] == s3[j]) dp[0][j] = true;else break;//第一列初始化for(int i = 1; i <= m; ++i)if(s1[i] == s3[i]) dp[i][0] = true;else break;//填表for(int i = 1; i <= m; ++i)for(int j = 1; j <= n; ++j)dp[i][j] = (s1[i] == s3[i + j] && dp[i - 1][j]) || (s2[j] == s3[i + j] && dp[i][j -1]);return dp[m][n];}
};

3.两个字符串的最小ASCII删除和

题目链接: 712. 两个字符串的最小ASCII删除和

题目分析:

在这里插入图片描述

返回 使两个字符串相等 所需删除字符的 ASCII 值的最小和。

在这里插入图片描述

算法原理:

在正式解决这道题之前,我们先看一下示例2,第二种删法Ascll码和最小,所以选择第二种。然后看一下删完之后留下来的字符串。是不是第二种删法留下来的字符串和是最大的。那现在能不能把上面问题转化一下,你让我找删除的最小和,是不是就是变相去找这两个字符串公共子序列里面Ascll码最大的那个。这两个字符串Ascll码总和是不变的,你让我找最小,其实就是变相去找公共子序列里面Ascll码和最大的。

在这里插入图片描述

分析:求两个字符串里面所有公共子序列里面,Ascll值的最大和。
这种方法也是我们常用的:正难则反

1.状态表示

经验 + 题目要求

dp[i][j] 表示:s1 的 [0, i] 区间以及 s2 的 [0, j] 区间内的所有子序列里,公共子序列的 ASCll 最大和

在这里插入图片描述

2.状态转移方程

根据最后一个位置的状况,分情况讨论

我们要找公共子序列,是不是要从s1拿出来一个子序列,再从s2拿出来一个子序列,判断它们是不是公共子序列,然后把它们Ascll码求一下。然后继续在s1里拿一个,s2里拿一个。。。,把所有情况都找到然后求里面的最大值。

所有从s1拿一个子序列,在从s2那一个子序列有如下情况

  1. 有s1[i],有s2[j]

  2. 有s1[i],没有s2[j]

  3. 没有s1[i],有s2[j]

  4. 没有s1[i],没有s2[j]

然后求出这四种情况的最大值。

在这里插入图片描述

有s1[i],有s2[j],子序列是以它们俩为结尾的。如果是公共子序列是不是这里两个位置要相等啊 s1[i] == s2[j],然后去s1[0, i - 1],s2 [0, j - 1] 找公共子序列Ascll码最大值就是dp[i-1][j-1],然后加上s1[i]的Ascll码或者s2[j]的Ascll码因为它俩Ascll码是一样的。

在这里插入图片描述

有s1[i],没有s2[j] 可能会直接想用 dp[i][j - 1] 公共子序列最大Ascll码和。但是要注意一下这个状态表示, 表示的是[0, i] 区间内所有的子序列,[0, i]既有s[i]也可以没有s[i],也就是说 情况2包含情况4。所以 s1[i],没有s2[j] 不能直接和 dp[i][j - 1] 划等号。但是没关系,我们求得是一个最大和。管dp[i][j - 1]里面包不包含情况4,你只要包含情况2就可以了。因为我们最后求得是最大值,所有这里可以用dp[i][j - 1]。

同理情况3也是这样。

在这里插入图片描述

没有s1[i],没有s2[j],就是dp[i-1][j-1],因为情况2、情况3包含情况4,所有可以不用考虑这种情况。

在这里插入图片描述

3.初始化

  1. 引入空串
  2. 里面的值要保证后序的填表是正确的
  3. 下标的映射关系

在这里插入图片描述

4.填表顺序

从上往下填写每一行,每一行从左往右

5.返回值

状态表示求的是两个字符串的区间里面公共子序列的Ascll 最大和,题目要求两个字符串相等所需删除字符的 ASCII 值的最小和 。所以可以这样做

  1. 找到两个字符串中公共子序列的Ascll 最大和,dp[m][n]
  2. 统计两个字符串中Ascll和 -> sum
  3. sum - dp[m][n] * 2
class Solution {
public:int minimumDeleteSum(string s1, string s2) {// 1.创建 dp 表// 2.初始化// 3.填表// 4.返回值int m = s1.size(), n = s2.size();vector<vector<int>> dp(m + 1,vector<int>(n + 1));for(int i = 1; i <= m; ++i)for(int j = 1; j <= n; ++j){if(s1[i - 1] == s2[j - 1])dp[i][j] = dp[i - 1][j - 1] + s1[i - 1];dp[i][j] = max(dp[i][j], max(dp[i - 1][j], dp[i][j - 1]));}int sum = 0;for(auto ch : s1) sum += ch;for(auto ch : s2) sum += ch;return sum - 2 * dp[m][n];}
};

4.最长重复子数组

题目链接: 718. 最长重复子数组

题目分析:

在这里插入图片描述

注意这道题,最长重复子数组,这与我们前面遇到两个数组dp子序列有点不一样。
子序列可以连续可以不连续,子数组一定要连续。

算法原理:

像之前两个数组dp问题,比如说最长公共子序列哪里,我们经验是选择第一个字符串[0, i]区间,第二个字符串[0, j]区间。然后把这两个区间作为研究对象,根据题目要求来定义状态表示。

这道题还是这样搞看一下有什么问题。

n1取[0, i]区间,n2取[0, j]区间,我要最长重复子数组。也就是说在n1这段区间找一下子数组,n2这段区间找一下子数组,然后把最长重复子数组长度统计一下。

选取[0, i]一段区间内的所有子数组,作为研究对象。
先想一想取某一段区间内所有子数组来研究 ,接下来推导下一个位置的时候,是不是得用到前面的状态,子数组这里有一个特性,在推i+1位置的时候,必须要跟在i位置后面才行。但是我们这个状态是选取选取[0, i]一段区间内的所有子数组而且是找那个最长的。但是最长的可能在[0, i]的中间,那研究i+1位置跟不了它的后面。所以说这个状态表示太大根本推不出来状态转移方程。研究i+1位置我们要先知道i位置的状态,也就是以i位置为结尾的i那个状态。而不是这个区间里所有子数组的状态 。

在这里插入图片描述

为什么子序列这里我们可以选一段区间来做呢?其实是子序列的话,在这个区间内的所有子序列,i+1都可以跟在后面,因为子序列不要求一定是连续的。但是i+1为子,这个区间选的子数组可能不能跟在后面。

1.状态表示

我们这个状态表示要能表示以 i 位置为结尾以及 j 位置为结尾的最长的那个子数组。所有dp可以这样表示

dp[i][j] 表示:nums1 中以 i 位置元素为结尾的所有的子数组以及 nums2 中以 j 位置为结尾的所有子数组中,最长重复子数组的长度。

在这里插入图片描述

2.状态转移方程

根据最后一个位置的状况,分情况讨论

我们要的是最长重复子数组,那以i位置结尾,以j位置结尾,这两个位置是不是可能相等也有可能不相等。

相等可以找到重复子数组,如果都不想等那以i和j为结尾根本就没有重复子数组。

不相等,重复子数组长度为0

相等,是不是要先找到以 i -1位置为结尾的和以 j - 1位置为结尾的。因为相等可以跟在i-1后面或者j-1后面形成更长的。所以要先找到以i-1为结尾以及j-1为结尾的最长的子数组长度,然后在后面加上nums1[i]或者nums2[j]

在这里插入图片描述

3.初始化

  1. 上面多开一行,左边多开一列,这样填表就不要越界了。
  2. 里面的值要保证后序的填表是正确的
  3. 下标的映射关系

我们可以根据空数组的定义来,填第一行,第一列的值。第一行表示第一个数组为空,第一行数组为空根本找不到重复子数组,所以第一行都是0,同理,第一列数组为空也根本找不到重复子数组,所以第一列都是0

在这里插入图片描述

4.填表顺序

根据状态转移方程。从上往下填写每一行。

5.返回值

我们的状态表示是以某个位置为结尾。所以我们要找到 dp 表里面的最大值。

class Solution {
public:int findLength(vector<int>& nums1, vector<int>& nums2) {// 1.创建 dp 表// 2.初始化// 3.填表// 4.返回值int m = nums1.size(), n = nums2.size();vector<vector<int>> dp(m + 1, vector<int>(n + 1));int ret = 0;for(int i = 1; i <= m; ++i)for(int j = 1; j <= n; ++j){if(nums1[i - 1] == nums2[j - 1])dp[i][j] = dp[i - 1][j - 1] + 1;ret = max(ret, dp[i][j]);}return ret;       }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/54632.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

创客匠人对话:创始人IP如何进阶?掌握这三点实现高质量多次转化

我们邀请到老蒋创客圈第67期对话标杆直播连麦&#xff0c;我们邀请到【君儒文化】平台创始人彭君如老师。从去年12月份参加创客匠人的线下大课后&#xff0c;就果断加入陪跑&#xff0c;到今年7月份顺利拿到68w的发售大结果。 前面我们介绍了彭老师的传承、发心愿景&#xff0…

小程序体验版无法正常请求接口,开启 调试可以正常请求

在本地开发工具可以正常访问小程序&#xff0c;上传代码后打开体验版&#xff0c;界面无法请求接口&#xff0c;手机小程序打开调试模式可以正常访问。这可以查看下小程序后台是否设置了服务器域名以及业务域名 然后查看小程序开发工具 - 详情 - 项目配置 重新上传代码&#xf…

二叉树的层序遍历(含八道leetcode相关题目)

文章目录 二叉树层序遍历模板102. 二叉树的层序遍历107. 二叉树的层序遍历 II199. 二叉树的右视图637. 二叉树的层平均值515. 在每个树行中找最大值429. N 叉树的层序遍历116. 填充每个节点的下一个右侧节点指针117. 填充每个节点的下一个右侧节点指针 II 二叉树层序遍历模板 …

240922-局域网内通过SSH与SFTP访问RHEL服务器

要通过SFTP&#xff08;安全文件传输协议&#xff09;在局域网内访问一台RHEL服务器&#xff0c;您需要确保以下步骤都已经正确完成&#xff1a; A. 在RHEL服务器上配置SFTP服务 RHEL默认通过sshd服务提供SFTP功能&#xff0c;SFTP使用SSH协议进行文件传输&#xff0c;因此需要…

【二等奖论文】2024年华为杯研赛D题成品论文(后续会更新)

您的点赞收藏是我继续更新的最大动力&#xff01; 一定要点击如下的卡片&#xff0c;那是获取资料的入口&#xff01; 点击链接获取【2024华为杯研赛资料汇总】&#xff1a; https://qm.qq.com/q/jTIeGzwkSchttps://qm.qq.com/q/jTIeGzwkSc 题 目&#xff1a; 大数据驱动的…

基于Ambari搭建hadoop生态圈+Centos7安装教程(还没写完,等明天补充完整)

当我们学习搭建hadoop的时候&#xff0c;未免也会遇见很多繁琐的事情&#xff0c;比如很多错误&#xff0c;需要解决。在以后公司&#xff0c;也不可能让你一个一个搭建hadoop&#xff0c;成千上万的电脑&#xff0c;你再一个个搭建&#xff0c;一个个报错&#xff0c;而且每台…

WebGL颜色与纹理

WEBGL中的着色器变量包括以下种类&#xff1a; 属性变量&#xff08;Attribute Variables&#xff09;&#xff1a;这些变量用于接收从应用程序中传递的顶点数据&#xff0c;比如顶点位置和颜色&#xff0c;是只读的不可修改。统一变量&#xff08;Uniform Variables&#xff…

小红书自动化写文以及发文机器人

&#x1f4aa;&#x1f3fb; 1. Python基础专栏&#xff0c;基础知识一网打尽&#xff0c;9.9元买不了吃亏&#xff0c;买不了上当。 Python从入门到精通 &#x1f601; 2. 毕业设计专栏&#xff0c;毕业季咱们不慌忙&#xff0c;几百款毕业设计等你选。 ❤️ 3. Python爬虫专栏…

[数据集][目标检测]红外微小目标无人机直升机飞机飞鸟检测数据集VOC+YOLO格式7559张4类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;7559 标注数量(xml文件个数)&#xff1a;7559 标注数量(txt文件个数)&#xff1a;7559 标注…

Java ETL - Apache Beam 简介

基本介绍 Apache Beam是一个用于大数据处理的开源统一编程模型。它允许用户编写一次代码&#xff0c;然后在多个批处理和流处理引擎上运行&#xff0c;如Apache Flink、Apache Spark和Google Cloud Dataflow等。Apache Beam提供了一种简单且高效的方式来实现数据处理管道&…

DETR论文翻译与理解

DETR&#xff08;Detection with transformer&#xff09; DETR&#xff1a;End to End Object Detection with Transformer 论文链接&#xff1a;2005.12872 (arxiv.org) 参考视频&#xff1a;https://www.bilibili.com/video/BV1GB4y1X72R/?spm_id_from333.788&vd_…

硬件工程师笔试面试——开关

目录 11、开关 11.1 基础 开关原理图 开关实物图 11.1.1 概念 11.1.2 常见的开关类型及其应用 11.2 相关问题 11.2.1 开关的工作原理是什么? 11.2.2 在设计一个电子系统时,如何选择最适合的开关类型? 11.2.3 不同类型的开关在实际应用中有哪些优势和局限性? 11.…

爵士编曲:爵士鼓编写 爵士鼓笔记 底鼓和军鼓 闭镲和开镲 嗵鼓

底鼓和军鼓 底鼓通常是动的音色&#xff0c;军鼓通常是大的音色。 “动”和“大”构成基础节奏。“动大”听着不够有连接性&#xff0c;所以可以加入镲片&#xff01; 开镲 直接鼓棒敲击是开镲音色 闭镲 当脚踩下踏板&#xff0c;2个镲片合并&#xff0c;然后用鼓棒敲击&am…

java(3)数组的定义与使用

目录 1.前言 2.正文 2.1数组的概念 2.2数组的创建与初始化 2.2.1数组的创建 2.2.1数组的静态初始化 2.2.2数组的动态初始化 2.3数组是引用类型 2.3.1引用类型与基本类型区别 2.3.2认识NULL 2.4二维数组 2.5数组的基本运用 2.5.1数组的遍历 2.5.2数组转字符串 2.…

面向对象程序设计——set容器の简析

1.set的介绍 • 序列式容器和关联式容器 • 我们已经接触过STL中的部分容器如&#xff1a;string、vector、list、deque、array、forward_list等&#xff0c;这些容器统称为序列式容器&#xff0c;因为逻辑结构为线性序列的数据结构&#xff0c;两个位置存储的值之间⼀般没有紧…

图片马赛克处理(Java)

1.需求 给图片的指定区域打码给整张图片打码马赛克方格取色支持中心点取色和随机取色马赛克支持灰度处理 2.源码 package com.visy.utils;import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOE…

(k8s)Kubernetes部署Promehteus

转载&#xff1a;Kubernetes&#xff08;k8s&#xff09;部署Promehteus 一、概述 在1.8版本以后heapster由metrics-server替代&#xff1b;从k8s的v1.11版本开始已经全面转向以Prometheus为核心的新监控体系架构&#xff1b;kube-prometheus 中包含了 prometheus 监控所用到的…

pg入门18—如何使用pg gis

1. 下载postgre gis镜像 2. 运行镜像 docker run -p 15432:5432 -d -e POSTGRES_PASSWORDAb123456! postgis/postgis:12-3.4-alpine 3. 使用gis # 进入容器&#xff0c;登录pgdocker exec -it bash# 登录数据库psql -U postgres# 创建数据库CREATE DATABASE mygeotest;# 使用…

算法:双指针题目练习

文章目录 算法:双指针移动零复写零快乐数盛最多水的容器有效三角形的个数查找总价格为目标值的两个商品三数之和四数之和 总结 算法:双指针 移动零 定义两个指针,slow和fast.用这两个指针把整个数组分成三块. [0,slow]为非零元素,[slow1,fast-1]为0元素,[fast,num.length]为未…

【Web】御网杯信息安全大赛2024 wp(全)

目录 input_data admin flask 如此多的FLAG 一夜醒来之全国CTF水平提升1000倍&#x1f60b; input_data 访问./.svn后随便翻一翻拿到flag admin dirsearch扫出来 访问./error看出来是java框架 测出来是/admin;/路由打Spring View Manipulation(Java)的SSTI https:/…