当前位置: 首页 > news >正文

【贪心算法】贪心算法五

贪心算法五

  • 1.跳跃游戏 II
  • 2.跳跃游戏
  • 3.加油站
  • 3.单调递增的数字

在这里插入图片描述

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

1.跳跃游戏 II

题目链接: 45. 跳跃游戏 II

题目分析:

在这里插入图片描述

给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。

每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i + j] 处。这句话特别重要的地方就是 任意

下面举个例子,刚开始在0号位置最大跳跃长度是3,可以跳到下标3的位置。
在这里插入图片描述
你可以跳转到任意 nums[i + j] 处,这句话意思,nums[i]里面存的3是最大跳跃长度,你可以选择跳3步、跳2步、跳1步。

在这里插入图片描述
返回到达 nums[n - 1] 的最小跳跃次数。生成的测试用例可以到达 nums[n - 1]。

算法原理:

  1. 贪心(X)

刚开始处于0好位置,这里有一个最大跳跃长度,那每次跳跃的时候就非常贪心的跳最长跳跃长度。但是这种贪心是错的。

在这里插入图片描述
2. 动态规划

这个模型无非就是从左往右的一个模型,其实就是动规里面非常常规的线性dp问题。

1.状态表示

dp[i] 表示:从 0 位置开始,到达 i 位置的时候最小跳跃次数

2.状态转移方程

根据最近一步划分情况:

能够到 i 位置的前提是要满足 nums[j] + j >= i,说明能够从 j 位置到达 i 位置,那到达 j 位置的最小跳跃次数 在 加上 从 j 到 i 这一跳跃次,就是到达 i 位置最小跳跃次数,j的位置有很多,因此外面要求dp[i]的最小值。

在这里插入图片描述

3.初始化

dp[0] = 0 初始就在0位置,然后要取dp[i]的最小值,因此0位置之后可以初始化 INT_MAX

4.填表顺序

从左往右

5.返回值

dp[i] 表示:从 0 位置开始,到达 i 位置的时候最小跳跃次数,我们要的是到底n-1位置的最小跳跃次数,因此返回dp[n-1]

class Solution {
public:int jump(vector<int>& nums) {// 动态规划int n = nums.size();vector<int> dp(n, INT_MAX);dp[0] = 0;for(int i = 1; i < n; ++i)for(int j = 0; j < i; ++j)if(nums[j] + j >= i)dp[i] = min(dp[i], dp[j] + 1);return dp[n - 1];}
};

虽然可以通过,但是实际复杂度是O(N^2)

  1. 类似于层序遍历的过程

刚开始在2这个位置,此时起跳可以跳到3和1的位置。2这里可以表示第1次起跳的位置,3和1表示第2次起跳的位置。

在这里插入图片描述

通过第2次起跳的位置,我们可以得到第3从起跳的位置,然后把重叠的删除,这里其实也有一点小贪心,如果能从第2次的1起跳,那为什么还要从第3次重叠的1起跳呢?跳跃次数更多了。所以只有1和4是第三次起跳的位置。

在这里插入图片描述

同理从第3次起跳位置,我们可以得到第4次起跳位置,

在这里插入图片描述

你会发现这里类似于层序遍历,每次都能知道起跳的左端点和右端点,然后遍历这一层的时候,又能找到下一层的左端点和右端点。只要发现更新出来下一次起跳位置能够覆盖到n-1位置的时候就停止,因为次数已经可以跳到最后一个位置了

在这里插入图片描述

如何实现呢?
我们仅需搞两个指针,left指向当前起跳的左端点,right指向当前起跳的右端点,把这个区间遍历一遍就可以找到下一个起跳区间,其中找左端点很好找就是right + 1,找右端点就是在遍历的过程中,拿着nums[i] + i 找到其中的最大值就是右端点。

在这个遍历过程中,我们仅需遍历一次就行了,所以时间复杂度是O(N)

class Solution {
public:int jump(vector<int>& nums) {int left = 0, right = 0, maxPos = 0, ret = 0, n = nums.size();while(left <= right)// 保险的写法,以防跳不到 n - 1 的位置{if(maxPos >= n - 1)// 先判断⼀下是否已经能跳到最后⼀个位置{return ret;}// 遍历当成层,更新下⼀层的最右端点 for(int i = left; i <= right; ++i){maxPos = max(maxPos, nums[i] + i);}left = right + 1;right = maxPos;++ret;}return -1;// 跳不到的情况}
};

2.跳跃游戏

题目链接: 55. 跳跃游戏

题目分析:
在这里插入图片描述

这道题和上面几乎一模一样,无非上面问的是跳到最后一个位置最小跳跃次数,这道题问的是能否跳到最后一个位置。

算法原理:

完全参考上面的解法3:利用层序遍历的过程

class Solution {
public:bool canJump(vector<int>& nums) {int left = 0, right = 0, maxPos = 0, n = nums.size();while(left <= right){if(maxPos >= n - 1){return true;}for(int i = left; i <= right; ++i){maxPos = max(maxPos, nums[i] + i);}left = right + 1;right = maxPos;}return false;}
};

3.加油站

题目链接: 134. 加油站

题目分析:

在这里插入图片描述

选择某个加油站为出发点,环绕一周看是否能回到出发点。如果可以就返回对应的下标,不能就返回-1。

在这里插入图片描述

初始时油箱是空的,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i],油箱容量是无限的。

假设从3位置出发,刚开始油箱为空,此时可以补充1升汽油,但是需要3升汽油才能到下一个位置。所以这个位置不可以,同理4和5都不可以。
在这里插入图片描述
可以从1位置出发 ,从这里可以补充4升汽油,仅需消耗1升就可以到下一个位置,到下一个位置还剩下3升

在这里插入图片描述

到2的位置,补充5升,现在共有8升,消耗2升,到下一个位置还有6升

在这里插入图片描述
然后补充1升,消耗3升,到下一个位置还剩4,在补充2升,消耗4升,到下一个位置还剩2升,在补充3升,消耗5升,到出发点正好剩下0,可以到达,返回3。

在这里插入图片描述

算法原理:

解法一:暴力解法 -> 枚举

首先可以想到一个优化,仅需考虑g和c的差就可以了,比如第一个位置会加1升油,消耗3升油,它们的差就是从这个加油站获得的净收益。如果从负开始走绝对是走不到下一个位置的,所以肯定会选择净收益为正的作为出发点。

在这里插入图片描述

我们这道题其实特别像是一道模拟的题,任意枚举一个位置看看从这个位置能不能绕一圈会回来就可以。如果不能就去枚举下一个位置。

所以我们的暴力策略就很简单:

  1. 依次枚举所有的起点
  2. 从起点开始,模拟一遍加油的流程即可

虽然策略很简单,但是要注意这里是有环的,所以写代码的时候要考虑如何从最后一个位置回到0位置。

在这里插入图片描述
我们的贪心就是根据暴力优化来的,所以先搞定暴力的代码。然后优化的时候仅需加一句代码,就能将时间复杂度从O(N^2)变成O(N)

如何实现暴力的代码?

这里我们主要考虑就是如何从最后一个位置回到第一个位置,其实这里两层for循环就可以搞定,我们创建一个变量step,用这个变量表示从 i 往后走了多少步,step变化是从 0 ~ n - 1。然后 (i + step)% n (数组大小) 就可以从最后一个位置回到第一个位置。

class Solution {
public:int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {int n = gas.size();for(int i = 0; i < n; ++i)// 依次枚举所有的起点{int rest = 0;// 标记一下净收益int step = 0;for(; step < n; ++step)// 枚举往后走的步数{int index = (i + step) % n;// 求出走 step 步之后的下标rest = rest + gas[index] - cost[index];if(rest < 0) break;}if(rest >= 0) return i;}return -1;       }
};

解法二:优化 -> 找规律(贪心)

diff表示g-c的差,我们的暴力解法是依次固定一个位置为起点,从这个起点开始模拟加油流程,其实就是把净收益加一下。

在这里插入图片描述

如果发现从a加到f小于0了,说明从f这个位置开始就不能往后走了,所以从a为起来最多能到f这个位置。这里有一个等式。

在这里插入图片描述
我们的暴力是枚举下一个起点然后在走。然后我们这里也有个不等式,

在这里插入图片描述

我们要想从a走到b,一定是a>=0的,从a加到f < 0,现在第二个不等式又少了a,那更是< 0

在这里插入图片描述

同理从c为起点也是越不过f的,a + b >= 0才能到c,等式少了a+b,那更小于0

在这里插入图片描述
所以说发现有一个起点点都跑不到某个位置,那中间的都不用在考虑了,不用在枚举了。直接让 i 指针更新到 五角星 后面的一个位置,也就是 i = i + step + 1

在这里插入图片描述

我们最差会遍历数组两遍,假设还是以a为起点,发现到h走不到了,下一个位置就是i,最差我们绕回去在遍历一遍再走到h位置,相当于遍历了数组两遍,然后接下来更新 i 的时候 是 i + step + 1 此时就已经越界了。所以最差遍历数组两遍,时间复杂度O(N)

在这里插入图片描述

class Solution {
public:int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {int n = gas.size();for(int i = 0; i < n; ++i)// 依次枚举所有的起点{int rest = 0;// 标记一下净收益int step = 0;for(; step < n; ++step)// 枚举往后走的步数{int index = (i + step) % n;// 求出走 step 步之后的下标rest = rest + gas[index] - cost[index];if(rest < 0) break;}if(rest >= 0) return i;i = i + step;//优化}return -1;}
};

3.单调递增的数字

题目链接: 738. 单调递增的数字

题目分析:

在这里插入图片描述

算法原理:

解法一:暴力解法 -> 暴力枚举

不是给了我们一个n,然后让找到小于等于n的最大数字,且数字是单调递增的。
所以我们可以从n枚举到0,只要找到数字是单调递增的,就返回。因为我们是从大到小枚举所以这个数一定是小于等于n并且是最大的那个数。

  1. 从大到小的顺序,枚举 [n,0] 区间内的数字
  2. 判断数字是否是 “单调递增的”

这里最主要的就是判断一个数是单调递增的。肉眼很好判断,但是让计算机不好判断,这里我们有两个常用方法:

第一种方法:我们遇到有个数字的时候,如果想处理某一位的时候,最常用的方式就是将数字转化为字符串。

比如要找数字中的每一位,如果单看数字1234你很难找每一位,但是我们可以将1234 转化为 “1234”,此时就可以用指针来遍历每一位

class Solution {
public:int monotoneIncreasingDigits(int n) {for(int i = n; i >= 0; --i){string nums = to_string(i);int j = 0, m = nums.size();for(; j < m - 1; ++j){if(nums[j] > nums[j + 1]) break;}if(j == m - 1) return i;}return -1;   }
};

第二种方法:% 10 , / 10

prev记录之前%10得到的数字,cur记录/10之后然后当前%10得到的数字。

class Solution {
public:int monotoneIncreasingDigits(int n) {for(int i = n; i >= 0; --i){int prev = INT_MAX, cur = 0, num = i;while(num){cur = num % 10;if(cur > prev) break;prev = cur;num /= 10;}if(num == 0) return i;}return -1;}
};

这两种方法都会超时!时间复杂度是O(nlogn),O(logn)表示把数字中的每一位都提取出来时间复杂度是O(logn)

解法二:贪心(找规律)

假设有下面这样一个数,我们观察1-5是递增的,从5后面开始就是递减的。此时第一个贪心,如果前面的数是递增的我们会不会去修改它?肯定不会!修改高位势必会给高位某个数减小,影响太大了。

  1. 如果高位单调递增的话,我们不去修改

在这里插入图片描述

从5之后开始下降,我们最终要想找一个单调递增的话,调整一下后面的数使它从5开始递增并且尽可能的大,但是这个想法是实现不了的,你是会让4变成5,但是整个数相比之前就变大了。所以这个策略不行,调整4367使它从5之后开始递增是实现不了的。原因就是后面数的变化受到5的限制。如何解除这个限制呢?让这个5减小1变成4,然后的数都变成9,绝对是最大递增的。

  1. 从左往右,找到第一个递减的位置,使其减小1,后面的数全部修改成 9

在这里插入图片描述

但是这里还有个问题,比如下面这个数,5是重复的,从左到右扫描到最后一个5的位置,但是执行刚才的策略是让最后一个5减少1,后面数都变成9,但是不行啊,你让最后一个5变成4,这个数就不是一个递增的了。其实我们应该调整第一个5变成4,后面的数都变成9

  1. 从左往右,找到第一个递减的位置,从这个位置向前推,推到相同区域的最左段使其减小1,后面的数全部修改成 9

在这里插入图片描述

class Solution {
public:int monotoneIncreasingDigits(int n) {string s = to_string(n);// 把数字转化成字符串int i = 0, m = s.size();// 找第⼀个递减的位置while(i + 1 < m && s[i] <= s[i + 1]) ++i;if(i + 1 == m) return n;// 判断⼀下特殊情况// 回推while(i - 1 >= 0 && s[i] == s[i - 1]) --i;s[i]--;for(int j = i + 1; j < m; ++j) s[j] = '9';return stoi(s);}
};

证明:

证明方法:反证法

假设贪心解是错误的,那必定会存在一个最优解,证明一下这个最优解是不存在的,那我们的贪心解就是最优的。

在这里插入图片描述
这里我们分开讨论,第一种贪心解得到的数和原数个数是匹配的,第二种个数不匹配。

先看第一种情况,假设贪心解不是最优解,那势必会存在一个最优解,最优解是严格大于贪心解并且是严格递增的。其次位数是一样的,贪心解位数都一样,最优解比贪心解大,位数肯定也是一样的。位数一样,从左扫描最优解肯定存在某一位是大于贪心解某一位的。

这里可以分为3个区域,递增区域,让原数减1区域,以及后面的区域。不过如果前两个区域都是一样的话,第三个区域肯定不存在比999还大的。因此我们只考虑前两个区域最优解的某个数大于贪心解

在这里插入图片描述

第一块区域,要么大于1、要么大于2、要么大于3,但是都是不存在的,因为这个数是单调递增的,最小的1333333都比原解还大了。

在这里插入图片描述

第二块区域,如果中间这个数比贪心解的这个数大最低就是4,但是也是不存在的,最优解也是一个递增的数如果这个是数4,后面即使全是4,最小的是1234444还比原数大,所以也是不存在的。

在这里插入图片描述
那后面的区域更别提了,不可能有大于999的数。所以说如果贪心解是错的,根本找不到一个最优解比贪心解大,所以说刚才的假设是错误的,因此我们的贪心解是正确的。

在这里插入图片描述

接下来我们看位数减少的情况,我们会发现位数减少的这个数正好是最大的减少位数中的最大数,你想找一个最优解比贪心解还大的情况那必定是6位数,如果是6位数还想保证比原数小,那这个数只能是1111111但是比原数大,因此这个最优解也是不存在的,所以我们的贪心就是最优的。都找不到一个最优解大于贪心解。

在这里插入图片描述

相关文章:

【贪心算法】贪心算法五

贪心算法五 1.跳跃游戏 II2.跳跃游戏3.加油站3.单调递增的数字 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f603; 1.跳跃游戏 II 题目链接&…...

vue2播放视频和预览文件的组件以及使用方法

##文件预览组件 按照组件 解决展示pdf的问题 npm install pdfh5 npm install canvas2.8.0 --ignore-scripts npm install --save dommatrix npm install --save web-streams-polyfill解决excel和docx预览的问题 npm install vue-office/docx vue-demi0.14.6 npm inst…...

记录一下,解决js内存溢出npm ERR! code ELIFECYCLEnpm ERR! errno 134 以及 errno 9009

项目是个老项目&#xff0c;依赖包也比较大&#xff0c;咱就按正常流程走一遍来详细解决这个问题&#xff0c;先看一下node版本&#xff0c;我用的是nvm管理的&#xff0c;详细可以看我的其他文章 友情提醒&#xff1a;如果项目比较老&#xff0c;包又大&#xff0c;又有一些需…...

【批处理脚本】更改Windows系统中的 hosts 解析文件

概述 作用 修改 Windows 系统中的 hosts 文件&#xff0c;可以实现 插入 或 删除 条目。该脚本允许用户以管理员权限执行&#xff0c;将特定的域名解析到指定的 IP 地址 应用场景 非常适用于需要频繁或批量修改 hosts 文件的场景&#xff1a; 屏蔽网站、域名重定向、DNS 污染防…...

AIGC 与艺术创作:变革与机遇

在当今数字化时代&#xff0c;人工智能生成内容&#xff08;AIGC&#xff09;正以惊人的速度重塑着艺术创作的格局&#xff0c;为艺术家们带来了令人振奋的新机遇。 一.AIGC 的崛起与艺术领域的变革 随着人工智能技术的不断进步&#xff0c;AIGC 逐渐在艺术领域崭露头角。它依…...

String IP和Int IP的互相转换

android中&#xff0c;wifiManager.connectionInfo.ipAddress 可以获取到wifi的ip地址&#xff0c;但这是一个int值&#xff0c;如何转换为常见的如192.168.1.129这种形式&#xff0c;以及这种形式如何转换回int值的形式。 这里ip分为4段&#xff0c;每一段的值都是0 ~ 255&am…...

【大数据学习 | 面经】yarn的资源申请和分配的单位-Container

在yarn中&#xff0c;资源的申请和分配是以container为单位进行的&#xff0c;而不是直接以application和task为单位。 每个提交到yarn上的应用程序&#xff08;application&#xff09;都有一个对应的ApplicationMaster&#xff08;AM&#xff09;。这个AM负责与ResourceMana…...

php基础:文件处理2

1.文件属性 当我们在程序中操作文件时&#xff0c;可能会使用到文件的一些常见属性&#xff0c;比如文件的大小、类型、修改时间、访问时间以及权限等等。PHP 中提供了非常全面的用来获取这些属性的内置函数&#xff0c;如下表所示。 2.目录操作 新建目录&#xff1a;mkdir(路…...

gradle下载慢解决方案2024 /12 /1android studio (Windows环境)

gradle下载慢解决方案2024 /12 /1 默认环境配置好了,环境配置和程序安装请出门右转 打开软件,点击右上角设置,找到如下设置页 选择本地安装并制定好你已经安装好的 gradle 应用保存即可 全局插件环境配置(新版本可以直接在设置中添加了) 找对应位置添加国内源并把前面的内置源…...

使用Java将PDF文件解析成Excel文件

安装pom依赖 <!-- 解析pdf--><dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.27</version> <!-- 请检查并使用最新版本 --></dependency>测试读取pdf文件…...

怎么区分直线模组中的导程和行程?

直线模组是一种直线传动装置&#xff0c;安装方便&#xff0c;精度高&#xff0c;其使用范围广。直线模组中的导程和行程是两个不同的概念&#xff0c;它们分别描述了直线模组的不同性能参数。 直线模组的行程指的是模组能够正常移动的最大距离&#xff0c;即滑块预期移动的有效…...

算法日记 42 day 图论

今天来看看广度优先搜索&#xff0c;并且写几个题。刷到这里我才想起来&#xff0c;当时第一次面试的时候问的就是这个题&#xff0c;当时大概知道一点思路&#xff0c;但不清楚是图论方面的&#xff0c;更别说写出来了。 广度优先搜索&#xff08;BFS&#xff09; 不同于深度…...

STM32 GPIO 8种工作模式的应用场景

目录 一、四种输入模式1、模拟输入&#xff1a;2、浮空输入&#xff1a;3、上拉输入&#xff1a;4、下拉输入&#xff1a; 二、四种输出模式1、推挽输出&#xff1a;2、开漏输出&#xff1a;3、复用推挽输出&#xff1a;4、复用开漏输出&#xff1a; 一、四种输入模式 1、模拟…...

JVM 类加载器有哪些?双亲委派机制的作用是什么?如何自定义类加载器?

类加载器分类 大家好&#xff0c;我是码哥&#xff0c;可以叫我靓仔&#xff0c;《Redis 高手心法》畅销书作者。 先回顾下&#xff0c;在 Java 中&#xff0c;类的初始化分为几个阶段: 加载、链接&#xff08;包括验证、准备和解析&#xff09;和 初始化。 而 类加载器&#x…...

揭秘:短视频矩阵源码功能开发分析!!!

一、短视频矩阵系统源码概述 短视频矩阵系统源码旨在为内容创作者及企业提供一种高效的工具&#xff0c;以实现对多个短视频账户的一站式管理。该系统支持同时管理、发布、监控和优化多达1000个短视频账户&#xff0c;显著提升了操作效率。 二、主要功能 1. 多账号管理 该系…...

leetcode - 2337. Move Pieces to Obtain a String

Description You are given two strings start and target, both of length n. Each string consists only of the characters ‘L’, ‘R’, and ‘_’ where: The characters ‘L’ and ‘R’ represent pieces, where a piece ‘L’ can move to the left only if there i…...

第九篇:k8s 通过helm发布应用

什么是helm&#xff1f; Helm 是 Kubernetes 的包管理器。Helm 是查找、分享和使用软件构建 Kubernetes 的最优方式。 在红帽系的Linux中我们使用yum来管理RPM包&#xff0c;类似的&#xff0c;在K8s中我们可以使用helm来管理资源对象&#xff08;Deployment、Service、Ingress…...

MySQL:锁机制

锁是计算机协调多个进程或线程并发访问某一资源的机制&#xff08;避免争抢&#xff09;。 在数据库中&#xff0c;除传统的计算资源&#xff08;如 CPU、RAM、I/O 等&#xff09;的争用以外&#xff0c;数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效…...

在lio_sam中融入GPS

文章目录 概要GPS里程计GPS因子反算后的GPS里程计概要 在LIO(激光惯性里程计)系统中,将GPS信息融合到里程计中,借助GTSAM(Georgia Tech Smoothing and Mapping)库进行因子图优化,可以有效提升全局定位精度。 GPS里程计 利用GeographicLib第三方库将经纬度投影到局部笛…...

快速构建NLP理论知识体系

NLP理论知识体系 一句话解释NLPNLP模型及原理简述1、Rag 一句话解释NLP 如果我们要实现机器翻译、情感分析、问答系统、文本摘要、聊天机器人、构造智能化的辅助文件填写模板&#xff0c;NLP可以通过现成的模型对输入的语音、文字、图片进行处理&#xff08;分词、标词性、去停…...

长期稳定境外号码解决方案:内地用户如何打电话、接收短信和验证码

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 三大方案对比 📒📝 免费且稳定的境外号码📝 长期稳定且符合本地政策📝 适合低频使用者⚓️ 相关链接 ⚓️📖 介绍 📖 许多用户在日常生活中需要拨打境外电话、接收短信或验证码,尤其是跨境电商从业者,更是对境外号…...

SpringCloud 与 SpringBoot版本对应关系,以及maven,jdk

目录 SpringCloud 与 SpringBoot各版本的对应关系 方式一 Learn 方式二 OverView SpringBoot与JDK、maven 容器等对应关系 SpringCloud 与 SpringBoot各版本的对应关系 SpringCloudSpringBootFinchley2.0.xFinchley.SR1Spring Boot >=2.0.3.RELEASE and <=2.0.9RELEAS…...

FSMC实验

FSMC &#xff0c;即灵活的静态存储控制器&#xff0c;能够与同步或异步存储器和 16 位 PC 存储器卡连接&#xff0c; STM32 的 FSMC 接口支持包括 SRAM 、 NAND FLASH 、 NOR FLASH 和 PSRAM 等存储器。 从上图我们可以看出&#xff0c; STM32 的 FSMC 将外部设…...

K8s命令大全(Complete List of K8s Commands)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 本人主要分享计算机核心技…...

C++学习笔记

小甲鱼学习课程 02 #include <iostream> 头文件 iostream iostream 翻译为IO流 输入输出流 using namespace std; 引入命名空间 c标准库所使用的所有标识符都是在同一个特殊的名字空间std中来定义的&#xff1b; 偷懒使用这句话&#xff1b; std::cout <…...

伺服控制电机多大功率合适?

随着现代工业自动化的发展&#xff0c;伺服控制电机在各个行业的应用愈加广泛。伺服电机以其精确的控制、高效的运行和高响应速度&#xff0c;成为许多机械设备中不可或缺的组成部分。然而&#xff0c;在选择伺服电机时&#xff0c;确定其功率大小是一个关键环节。那么&#xf…...

《OpenCV 基础全攻略:从入门到精通》

《OpenCV 基础全攻略&#xff1a;从入门到精通》 一、OpenCV 简介&#xff08;一&#xff09;特点&#xff08;二&#xff09;优势&#xff08;三&#xff09;应用场景 二、安装与配置三、OpenCV 函数详解1. 图像读取函数 cv2.imread ()2. 图像显示函数 cv2.imshow ()3. 图像保…...

spring ai如何使用function call调用第三方模型

这里写自定义目录标题 背景什么是function call怎么用function call&#xff1f;总结 背景 一直困惑于ai是如何使用插件或者其他一些功能的&#xff0c;后来发现&#xff0c;很多大模型都支持function call功能&#xff0c;如何让大模型能够联网查询呢&#xff0c;function ca…...

2024 数学建模国一经验分享

2024 数学建模国一经验分享 背景&#xff1a;武汉某211&#xff0c;专业&#xff1a;计算机科学 心血来潮&#xff0c;就从学习和组队两个方面指点下后来者&#xff0c;帮新人避坑吧 2024年我在数学建模比赛中获得了国一&#xff08;教练说论文的分数是湖北省B组第一&#xff0…...

javaweb-Mybaits

1.Mybaits入门 &#xff08;1&#xff09;介绍 &#xff08;2&#xff09; 2.Mybaits VS JDBC 3.数据库连接池 &#xff08;1&#xff09;SpringBoot默认连接池为hikari&#xff0c;切换为Druid有两种方式 方式一&#xff1a;加依赖 方式二&#xff1a;直接修改配置文件 …...

108.【C语言】数据结构之二叉树查找值为x的节点

目录 1.题目 代码模板 2.分析 分类讨论各种情况 大概的框架 关键部分(继续递归)的详解 递归调用展开图 3.测试结果 其他写法 4.结论 5.注意事项 不推荐的写法 1.题目 查找值为x的节点并返回节点的地址 代码模板 typedef int BTDataType; typedef struct BinaryT…...

Ant-Design-Vue 全屏下拉日期框无法显示,能显示后小屏又位置错乱

问题1&#xff1a;在全屏后 日期选择器的下拉框无法显示。 解决&#xff1a;在Ant-Design-Vue的文档中&#xff0c;很多含下拉框的组件都有一个属性 getPopupContainer可以用来指定弹出层的挂载节点。 在该组件上加上 getPopupContainer 属性,给挂载到最外层盒子上。 <temp…...

sec啥意思

sec的基本含义是秒&#xff0c;是时间的基本单位之一&#xff1b;在数学中表示正割函数&#xff1b;在计算机科学中有时指安全&#xff1b;在法语中意为干的等。 sec的多重含义与应用 sec在数学中的定义 在数学领域&#xff0c;尤其是三角学中&#xff0c;sec代表正割函数&a…...

云计算vspere 安装过程

1 材料的准备 1 安装虚拟机 vmware workstation 2 安装esxi 主机 3 在esxi 主机上安装windows 2018 dns 服务器 4 在虚拟机上安装windows 2018 服务器 6 安装vcenter 5 登入界面测试 这里讲一下&#xff0c;由于部署vspere 需要在windows 2012 服务器上部…...

spring-boot打包前重新拉取maven依赖

在使用 Maven 构建 Spring Boot 项目时&#xff0c;如果希望在每次打包时都强制拉取依赖&#xff0c;可以通过以下方法实现。 方法一&#xff1a;在命令行强制更新依赖 在执行 mvn package 或 mvn install 等命令时&#xff0c;添加 -U 参数&#xff1a; mvn clean package -…...

华为云域名网站,域名切换到Cloudflare CDN出现访问报错:DNS 重定向次过多

网站域名切换到Cloudflare出现访问报错&#xff1a;重定向次过多&#xff0c;应该如何处理&#xff1f; 最近我自己已经遇到很多次这个情况了&#xff0c;将网站域名DNS切换到Cloudflare之后&#xff0c;网站会打不开&#xff0c;出现重定向次数过多报错。 网站域名切换到Clo…...

浔川AI翻译v5.1.0版本正式亮相!

浔川 AI 翻译 v5.1.0 版本正式亮相&#xff01; 在科技浪潮汹涌澎湃的今天&#xff0c;浔川 AI 翻译以其卓越的技术实力和对用户需求的精准把握&#xff0c;自豪地向全球用户宣布&#xff1a;浔川 AI 翻译 v5.1.0 版本正式闪耀登场&#xff01;这一全新版本在继承以往优势的基础…...

Merkle 树 应用在 代码工程

将 Merkle 树 应用在 代码工程 中&#xff0c;尤其是在大型项目中&#xff0c;可以帮助管理和验证代码的完整性、追踪代码变更、提高版本控制的效率等。通过将代码文件、类、函数等结构映射到 Merkle 树中&#xff0c;我们可以高效地验证代码库的任何变更&#xff0c;确保每个部…...

如何将表中存储的 JSON 数据转换为新表

如何将表中存储的 JSON 数据转换为新表 引言 本文介绍如何使用 PostgreSQL 的 JSON 函数&#xff0c;将 log_table 表中的 param_json 字段&#xff08;存储为 JSON 数组&#xff09;转换为一张新的表&#xff0c;并提取出具体的字段值。 表结构说明 假设 log_table 表的结…...

鸿蒙开发——使用ArkTs处理XML文本

1、概 述 XML&#xff08;可扩展标记语言&#xff09;是一种用于描述数据的标记语言&#xff0c;旨在提供一种通用的方式来传输和存储数据&#xff0c;特别是Web应用程序中经常使用的数据。XML并不预定义标记。因此&#xff0c;XML更加灵活&#xff0c;并且可以适用于广泛的应…...

借助vector实现进制转换详解

进制转换&#xff0c;没什么可说的&#xff0c;大一级别的水平&#xff0c;不过在某些考研题目中可能会涉及到顺序栈的实现&#xff0c;本贴不使用顺序栈&#xff0c;用STL里面的vector模拟一下&#xff1a;关键在于想清楚【除留取余】的逻辑&#xff0c;至于用什么结构存放中间…...

混合云策略在安全领域受到青睐

Genetec 发布了《2025 年物理安全状况报告》&#xff0c;该报告根据超过 5,600 名该领域领导者&#xff08;其中包括 100 多名来自澳大利亚和新西兰的领导者&#xff09;的回应&#xff0c;揭示了物理安全运营的趋势。 报告发现&#xff0c;澳大利亚和新西兰的组织采用混合云策…...

Jackson - 序列化和反序列化Java集合对象

在本文中&#xff0c;我将向您展示如何使用Jackson API来序列化和反序列化Java集合对象&#xff0c;如List、Set和Map。 我们将通过具体的示例演示如何利用ObjectMapper类的方法进行这些操作。 主要内容 添加Maven依赖项使用Jackson API进行List序列化使用Jackson API进行Se…...

No.26 笔记 | 信息收集与工具实践指南

渗透测试的第一步&#xff1a;信息收集背后的“侦察艺术” 在网络安全的世界里&#xff0c;信息就是武器。 无论是追踪隐藏的漏洞&#xff0c;还是找到不被注意的入口&#xff0c;信息收集就像一场现代化的“谍战片”。而作为渗透测试的开场白&#xff0c;信息收集不仅考验技…...

使用倒排索引法解决分库分表后查询问题

数据进行了分库分表后&#xff0c;要查询某一条数据的信息&#xff0c;事先是不清楚该条数据在哪台服务器上的&#xff0c;这时候可以使用倒排索引法&#xff0c;将数据的关键信息存储到Redis中&#xff0c;然后从Redis中获取到数据所在的服务器信息和数据ID。 Redis倒排索引示…...

Linux操作系统--文件的重定向以及文件缓冲区

目录 前言 一、文件描述符的分配规则 二、重定向 三、系统中的重定向接口 1、dup2()介绍 2、dup2()使用 1&#xff09;输出重定向和追加重定向 2&#xff09;输入重定向 四、文件缓冲区 1、定义 2、缓冲区刷新的条件 1&#xff09;文件缓冲区存在的意义 2&…...

Linux 远程连接服务

远程连接服务器简介 什么是远程连接服务器 远程连接服务器通过文字或图形接口方式来远程登录系统&#xff0c;让你在远程终端前登录linux主机以取得可操 作主机接口&#xff08;shell&#xff09;&#xff0c;而登录后的操作感觉就像是坐在系统前面一样。 远程连接服务器的功…...

Chrome控制台 网站性能优化指标一览

打开chrome-》f12/右键查看元素-》NetWrok/网络 ctrlF5 刷新网页&#xff0c;可以看到从输入url到页面资源请求并加载网页&#xff0c;用于查看资源加载&#xff0c;接口请求&#xff0c;评估网页、网站性能等&#xff0c;如下图&#xff1a; request、stransferred、resour…...

【SpringBoot】使用IDEA创建SpringBoot项目

1、使用SpringBoot脚手架创建 我们使用SpringBoot的脚手架Spring Initializr创建&#xff0c;如图所示&#xff1a; 2、选择SpringBoot版本 最开始做项目时候&#xff0c;组长说创建一个 springboot 2.5.4 的项目&#xff0c;mysql使用 5.6.X &#xff0c;maven使用是3.6.X…...

Mysql锁

锁的分类 基于锁的属性分类&#xff1a;共享锁、排它锁。基于锁的粒度分类&#xff1a;表锁、行锁、记录锁、间隙锁、临键锁。基于锁的状态分类&#xff1a;意向共享锁、意向排它锁。 排他锁与任何的锁都不兼容&#xff0c;共享锁仅和共享锁兼容。由于MVCC的存在&#xff0c;…...