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

[贪心_7] 最优除法 | 跳跃游戏 II | 加油站

目录

1.最优除法

题解

2.跳跃游戏 II

题解

3.加油站

题解


利用 单调性,可以实现 区间跳跃

1.最优除法

链接: 553. 最优除法

给定一正整数数组 numsnums 中的相邻整数将进行浮点除法。

  • 例如,nums = [2,3,4],我们将求表达式的值 "2/3/4"

但是,你可以在任意位置添加任意数目的括号,来改变算数的优先级。你需要找出怎么添加括号,以便计算后的表达式的值为最大值。

以字符串格式返回具有最大值的对应表达式。

注意:你的表达式不应该包含多余的括号。

示例 1:

输入: [1000,100,10,2]
输出: "1000/(100/10/2)"
解释: 1000/(100/10/2) = 1000/((100/10)/2) = 200
但是,以下加粗的括号 "1000/((100/10)/2)" 是冗余的,
因为他们并不影响操作的优先级,所以你需要返回 "1000/(100/10/2)"。其他用例:
1000/(100/10)/2 = 50
1000/(100/(10/2)) = 50
1000/100/10/2 = 0.5
1000/100/(10/2) = 2

给定一正整数数组 nums,nums 中的相邻整数将进行浮点除法。

例如,nums = [2,3,4],我们将求表达式的值 “2/3/4”。
但是,你可以在任意位置添加任意数目的括号,来改变算数的优先级。

  • 你需要找出怎么添加括号,以便计算后的表达式的值为最大值。
  • 题意其实就是数组给一堆数,数中间其实都有除法的,此时让我们任意位置添加一些括号,使表达式的值为最大值,最后返回的是以字符串格式返回具有最大值的对应表达式。
  • 注意:你的表达式不应该包含多余的括号。

原本括号里面顺序是3/4/5,现在多添加一个括号还是(3/4)/5。

题解

举一个例子来提取我们的贪心策略

这个时候我们要明白一点,在这个表达式中添加括号最终都会转换为 x/y 的形式。

也就是从这些数中挑一些放在分子上,一些数放在分母上,


我们最终要的是 x/y 是最大的,一个分数要最大,要么就是分子变大,要么就是分子变小。

  • 接下来我们设计表达式就是尽可能让分子大,分母小。
  • 这就是我们的贪心方向。

还有一点无论在表达式哪里填上括号,a都是在分子上,b都是在分母上

  • 所以a和b这两个无法通过添加括号去改变的a/b。所以最终a一定在分子上,b一定在分母上。
  • 现在可供我们选择的就是c、d、e、f,为了使最终结果最大,我们就想无脑的把c、d、e、f和a一起放在分子上。

这里可以用贪心优化就是因为这个值乘起来是越来越大的

贪心策略:除了前两个数以外,其余的数全部放在分子即可

  • 如何实现贪心策略呢?
    这里我们用小学就学过的知识,负负得正。除除得正。因此我们仅需在b之前填一个(,f后填一个)
  • 括号里面得除法全都因为括号外面得除法变成除除得正

class Solution {
public:string optimalDivision(vector<int>& nums) {string str;if(nums.size()==1) return to_string(nums[0]);if(nums.size()==2){str+=to_string(nums[0]);str+='/';str+=to_string(nums[1]);return str;}for(int i=0;i<nums.size();i++){str+=to_string(nums[i]);str+='/';if(i==0) str+='(';if(i==nums.size()-1) {str.pop_back();str+=')';}}return str;}
};

2.跳跃游戏 II

链接: 45. 跳跃游戏 II

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

每个元素 nums[i] 表示从索引 i 向后跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i + j] 处:

  • 0 <= j <= nums[i]
  • i + j < n

返回到达 nums[n - 1] 的最小跳跃次数。生成的测试用例可以到达 nums[n - 1]

示例 1:

输入: nums = [2,3,1,1,4]
输出: 2
解释: 跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。

示例 2:

输入: nums = [2,3,0,1,4]
输出: 2

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

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

这句话特别重要的地方就是 任意

  • 下面举个例子,刚开始在0号位置最大跳跃长度是3,可以跳到下标3的位置。
    你可以跳转到任意 nums[i + j] 处,这句话意思
  • eg. 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();if(n==1) return 0;vector<int> dp(n,0x3f3f3f3f);dp[0]=0;for(int i=1;i<n;i++){for(int j=0;j<=i-1;j++){if(j+nums[j]>=i)dp[i]=min(dp[i],dp[j]+1);//交给 计算机//j-->i 次数要+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 ret=0,n=nums.size();int left=0,right=0;while(left<=right){if(right>=n-1) return ret;int tmp=right;for(int i=left;i<=tmp;i++){right=max(right,nums[i]+i);}left=tmp+1;ret++;}return -1;}
};

不要忘了,还要处理跳不到的情况

  • while(left<=right)
  • return -1;

3.加油站

链接: 134. 加油站

在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。

你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。

给定两个整数数组 gascost ,如果你可以按顺序绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1 。如果存在解,则 保证 它是 唯一 的。

示例 1:

输入: gas = [1,2,3,4,5], cost = [3,4,5,1,2]
输出: 3
解释:
从 3 号加油站(索引为 3 处)出发,可获得 4 升汽油。此时油箱有 = 0 + 4 = 4 升汽油
开往 4 号加油站,此时油箱有 4 - 1 + 5 = 8 升汽油
开往 0 号加油站,此时油箱有 8 - 2 + 1 = 7 升汽油
开往 1 号加油站,此时油箱有 7 - 3 + 2 = 6 升汽油
开往 2 号加油站,此时油箱有 6 - 4 + 3 = 5 升汽油
开往 3 号加油站,你需要消耗 5 升汽油,正好足够你返回到 3 号加油站。
因此,3 可为起始索引。

选择某个加油站为出发点,环绕一周看是否能回到出发点。

如果可以就返回对应的下标,不能就返回-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. (预处理) 计算出 每一步的 diff
  2. 依次枚举所有的起点
  3. 从起点开始,模拟一遍加油的流程即可

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

  • diff [-2, -2, -2, 3, 3]

我们的贪心就是根据暴力优化来的,所以先搞定暴力的代码。然后优化的时候仅需加一句代码,就能将时间复杂度从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();vector<int> diff(n);for(int i=0;i<n;i++){diff[i]=gas[i]-cost[i];}for(int i=0;i<n;i++){bool check=false;if(diff[i]>=0){check=true;int sum=diff[i];for(int step=1;step<n;step++){int curr=(i+step)%n;sum+=diff[curr];if(sum<0){check=false;break;}}}if(check) 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 

我们最差会遍历数组两遍,假设还是以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();vector<int> diff(n);for(int i=0;i<n;i++){diff[i]=gas[i]-cost[i];}for(int i=0;i<n;i++){int step=0;int sum=0;for(;step<n;++step){int curr=(i+step)%n;sum+=diff[curr];if(sum<0){break;}}if(sum>=0) return i;i+=step;}return -1;}
};

相关文章:

[贪心_7] 最优除法 | 跳跃游戏 II | 加油站

目录 1.最优除法 题解 2.跳跃游戏 II 题解 3.加油站 题解 利用 单调性&#xff0c;可以实现 区间跳跃 1.最优除法 链接&#xff1a; 553. 最优除法 给定一正整数数组 nums&#xff0c;nums 中的相邻整数将进行浮点除法。 例如&#xff0c;nums [2,3,4]&#xff0c;我…...

【Rust】Rust中的枚举与模式匹配,原理解析与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…...

【CUDA 编译 bug】ld: cannot find -lcudart

我们使用 Conda 安装 pytorch 和 CUDA 环境之后&#xff0c;要用 Conda 的CUDA环境进行某个库编译时&#xff0c;出现了bug&#xff1a; /mnt/data/home/xxxx/miniforge3/envs/GAGAvatar/compiler_compat/ld: cannot find -lcudart: No such file or directorycollect2: error…...

MYSQL之数据类型

数据类型分类 数值类型 在MySQL中, 整型可以指定是有符号的和无符号的, 默认是有符号的. 可以通过 UNSIGNED 来说明某个字段是无符号的. tinyint类型 以tinyint为例, 其它的整型类型都只是数据范围的区别. 数据越界 创建一个 tinyint 类型的 num 的属性, 大小为 1 字节, 不…...

Asp.Net Core 异常筛选器ExceptionFilter

文章目录 前言一、异常筛选器的核心概念用途&#xff1a;实现接口&#xff1a;执行时机&#xff1a; 二、使用步骤1.创建自定义异常筛选器2.注册异常筛选器全局注册&#xff08;对所有 Controller 生效&#xff09;&#xff1a;局部注册&#xff08;通过特性标记特定的 **Contr…...

WebUI可视化:第2章:技术基础准备

学习目标 ✅ 掌握HTML/CSS基础语法 ✅ 理解JavaScript核心功能 ✅ 了解前后端交互原理 2.1 HTML基础:网页的骨架 2.1.1 基础结构 每个HTML文件都必须包含以下基本结构: html <!DOCTYPE html> <html> <head><title>我的第一个网页</title> …...

Java基础集合 面试经典八股总结 [连载ing]

序言 八股&#xff0c;怎么说呢。我之前系统学习的内容&#xff0c;进行梳理。通过问题的方式&#xff0c;表达出得当的内容&#xff0c;这件事本身就很难。面试时心态、状态、掌握知识的情况等。关于八股文&#xff0c;我不想有太多死记硬背的内容&#xff0c;更多的是希望自我…...

大数据运维面试题

华为大数据运维面试题可能涵盖多个方面&#xff0c;以下是一些可能的面试问题及解析&#xff0c;这些问题旨在考察应聘者的技术知识、问题解决能力和对大数据运维的理解&#xff1a; 一、技术知识类问题 简述大数据运维的主要职责和工作内容 回答示例&#xff1a;大数据运维工…...

OpenBMC:BmcWeb login认证

BmcWeb在include\login_routes.hpp中实现了/login用于完成web的登录: BMCWEB_ROUTE(app, "/login").methods(boost::beast::http::verb::post)(handleLogin);inline void handleLogin(const crow::Request& req,const std::shared_ptr<bmcweb::AsyncResp>…...

Python学习之路(五)-接口API

在 Python 中结合数据库开发接口 API 通常使用 Web 框架(如 Flask 或 Django)和 ORM(对象关系映射)工具(如 SQLAlchemy 或 Django ORM)。以下是使用 Flask 和 SQLAlchemy 的详细步骤,展示如何结合数据库开发一个简单的 API。 使用 Flask 和 SQLAlchemy 开发 API 1. 安…...

数据库+Docker+SSH三合一!深度评测HexHub的全栈开发体验

作为一名技术博主&#xff0c;我最近一直被各种开发工具切换搞得焦头烂额。数据库要用Navicat&#xff0c;服务器管理得开Termius&#xff0c;Docker操作还得切到命令行&#xff0c;每天光在不同工具间切换就浪费了大量时间。直到团队里的一位架构师向我推荐了HexHub这个一体化…...

涂料油墨制造数字化转型的关键技术与挑战

涂料油墨制造行业正处于数字化转型的关键时期&#xff0c;这一转型是提升生产效率、增强产品质量和降低成本的重要途径。以下是该行业在数字化转型中的关键技术与面临的挑战&#xff1a; 关键技术&#xff1a; 工业互联网技术&#xff1a;通过在生产设备上安装传感器&#xf…...

UE5 调整字体、界面大小

文章目录 方案一 5.4 版本及以上&#xff08;推荐&#xff09;方案二 5.3 版本及以下&#xff08;推荐&#xff09;方案三 使用插件&#xff08;不推荐&#xff09; 方案一 5.4 版本及以上&#xff08;推荐&#xff09; 进入 编辑 > 编辑器偏好设置&#xff0c;如下图所示&…...

【OpenCV图像处理实战】从基础操作到工业级应用

目录 前言技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解核心作用讲解关键技术模块说明技术选型对比 二、实战演示环境配置要求核心代码实现&#xff08;6个案例&#xff09;案例1&#xff1a;图像基本操作案例2&#xff1a;边缘检测案例3&…...

生成随机验证码-解析与优化

文章目录 代码功能解析潜在问题与优化建议1. 安全性问题2. 易混淆字符过滤3. 参数校验4. 性能优化 扩展功能示例1. 自定义字符集2. 批量生成验证码 完整优化代码关键总结 代码功能解析 import random import stringdef generate_code(length6):chars string.digits string.a…...

VMware 虚拟机镜像资源网站

常见的 VMware 虚拟机镜像资源网站 网站名称链接地址特点OSBoxes.orgOSBoxes - Virtual Machines for VirtualBox & VMware 提供 .vmx .vmdk&#xff0c;适合 VMware 和 VirtualBox&#xff0c;更新频率高&#xff0c;界面清晰LinuxVMImages.comLinux VM Images - Downlo…...

HTML5 详细学习笔记

1. HTML5 简介 HTML5 是最新的 HTML 标准&#xff0c;于 2014 年 10 月由 W3C 完成标准制定。它增加了许多新特性&#xff0c;包括语义化标签、多媒体支持、图形效果、离线存储等。 1.1 HTML5 文档基本结构 <!DOCTYPE html> <html lang"zh-CN"> <h…...

真.从“零”搞 VSCode+STM32CubeMx+C <1>构建

目录 前言 准备工作 创建STM32CubeMx项目 VSCode导入项目&配置 构建错误调试 后记 前言 去年10月开始接触单片机&#xff0c;一直在用树莓派的Pico&#xff0c;之前一直用Micropython&#xff0c;玩的不亦乐乎&#xff0c;试错阶段优势明显&#xff0c;很快就能鼓捣一…...

Pikachu靶场

本质是信任了不可信的客户端输入。防御核心&#xff1a; 永不信任客户端提交的权限参数&#xff08;如 user_id, role&#xff09;。强制服务端校验用户身份与操作权限。定期审计权限模型&#xff0c;避免业务迭代引入新漏洞。 水平越权 1&#xff0c;按照网站的提示要求登录 进…...

五、web自动化测试01

目录 一、HTML基础1、HTML介绍2、常用标签3、基础案例3.1 前端代码3.2 自动化测试 二、CSS定位1、css介绍2、案例3、代码优化 三、表单自动化1、案例2、元素属性定位 四、后台基础数据自动化1、登录1.1 id与class定位1.2 定位一组元素 2、商品新增 一、HTML基础 可参考学习 链…...

利用软件I2C驱动OLED,点亮、熄灭OLED屏幕以及获取当前OLED屏幕开启状态

题目&#xff1a; 参考《I2C通信》的文档&#xff0c;自行连接电路&#xff0c;利用软件I2C驱动OLED&#xff0c;点亮、熄灭OLED屏幕以及获取当前OLED屏幕开启状态。   可以优先实现: 软件I2C初始化函数,用于初始化IO引脚   再实现: 主机发起始位和停止位,主机发送1个字节,…...

数据结构——栈与队列

1.栈 1.1概念 一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。 进行数据插入和删除操作的一端 称为栈顶&#xff0c;另一端称为栈底。 栈中的数据元素遵守后进先出 LIFO &#xff08; Last In First Out &#xff09;的原则。 压栈&#xff1a;栈…...

【嵌入式系统设计师(软考中级)】第二章:嵌入式系统硬件基础知识(3)

文章目录 4. 嵌入式系统I/O接口4.1 GPIO与PWM接口4.1.1 GPIO接口&#xff08;General-Purpose Input/Output&#xff09;4.1.2 PWM接口&#xff08;Pulse Width Modulation&#xff09; 4.2 A/D与D/A接口的基本原理与结构4.2.1 DA转换&#xff08;数模转换&#xff0c;Digital-…...

【网络安全】社会工程学策略

1. 社会工程学简介 社会工程攻击是威胁行为者常用的攻击方式。这是因为&#xff0c;诱骗人们提供访问权限、信息或金钱通常比利用软件或网络漏洞更容易。 您可能还记得&#xff0c;社会工程学是一种利用人为错误来获取私人信息、访问权限或贵重物品的操纵技术。它是一个涵盖性…...

ROS2---时间戳对齐

一、ROS2时间系统架构 时间模型 仿真时间&#xff08;Simulation Time&#xff09;&#xff1a;由/clock话题驱动&#xff0c;适用于离线仿真与调试。真实时间&#xff08;Real Time&#xff09;&#xff1a;基于系统硬件时钟&#xff0c;支持PTP协议&#xff08;IEEE 1588&…...

C语言教程(十五):C 语言函数指针与回调函数详解

一、函数指针 1.1 函数指针的概念 在 C 语言中&#xff0c;函数指针是指向函数的指针变量。每个函数在内存中都有一个起始地址&#xff0c;函数指针就存储了这个起始地址&#xff0c;通过函数指针可以调用相应的函数。 1.2 函数指针的定义 函数指针的定义语法如下&#xff1a;返…...

VSCode如何修改默认扩展路径和用户文件夹目录到其他盘以及微信开发工具如何修改扩展路径到其他盘

ps:因公司电脑c盘内存严重不足&#xff0c;而出本篇文章 1.Visual Studio Code 随着VsCode的使用时间的推移&#xff0c;安装的扩展以及数据逐步增多&#xff0c;导致c盘内存占用较大&#xff0c;所以这里将vscode的默认缓存路径等迁移到其他盘。 步骤如下 1.找到默认的存储…...

抽象类相关

抽象类的定义 抽象类 是一种特殊的类&#xff0c;它不能被实例化&#xff0c;只能作为基类来派生出具体类。抽象类至少包含一个纯虚函数 。纯虚函数是在函数原型前加上 0 的虚函数&#xff0c;表示该函数没有具体实现&#xff0c;必须由派生类来实现。 抽象类的作用 提供统…...

如何测试短信接口

目录 一、测试短信接口的基本流程 1. 了解短信接口文档 2. 使用工具测试短信接口 示例一&#xff1a;用 curl 测试 POST 请求 示例二&#xff1a;用 Postman 设置 POST 请求 3. 编写测试脚本&#xff08;Python 示例&#xff09; 二、测试类型和场景 ✅ 正常发送测试 …...

pycharm2024.3.2项目解释器选择问题

问题描述&#xff1a;已经选择了pyau虚拟环境的解释器&#xff0c;运行了conda activate pyau&#xff0c;但是为什么关闭pycharm2024.3.2软件重新启动后&#xff0c;打开终端是(base) PS D:\deepseektest> &#xff0c;为什么不是(pyau) PS D:\deepseektest> 解决问题&a…...

如何在 Dialog 中安全初始化 ECharts 并自动监听容器大小变化

如何在 Dialog 中安全初始化 ECharts 并自动监听容器大小变化 在使用 ECharts 的 Vue 项目中&#xff0c;我们常常会将图表放入弹窗&#xff08;如 Element UI 的 <el-dialog>&#xff09;中进行展示。但你是否遇到过以下问题&#xff1a; 图表初次显示尺寸异常&#x…...

如何借助ETL数据集成工具实现数据一致性?

主要可以从以下几个方面入手&#xff1a; 一、数据抽取阶段&#xff08;Extract&#xff09; 统一数据源连接方式&#xff1a;ETL工具通常支持多种数据源连接方式&#xff0c;如关系型数据库、非关系型数据库、文件系统、API接口等。在抽取数据时&#xff0c;要确保对各个数据…...

3.4/Q1,GBD数据库最新文章解读

文章题目&#xff1a;Burden of Carbon Monoxide Poisoning in Asian Countries From 1990 to 2021 and Its Projection Until 2030: An Analysis of the Global Burden of Disease Study 2021 DOI&#xff1a;10.2147/CLEP.S512786 中文标题&#xff1a;1990 年至 2021 年亚洲…...

【高中数学/古典概率】4红2黑六选二,求取出两次都是红球的概率

【问题】 袋子里装4只红球&#xff0c;2只黑球&#xff0c;大小完全相同&#xff0c;抽两次球&#xff0c;每次抽一只&#xff0c;抽出后不再放回&#xff0c;求取出的两次都是红球的概率。 【来源】 数林外传系列之《概率与期望》P20 单埻著 中国科学技术大学出版社 【数学…...

机器人操作中的生成式 AI:综述(上)

25年3月来自香港大学、香港理工、香港科大、浙大和清华大学的论文“Generative Artificial Intelligence in Robotic Manipulation: A Survey”。 本综述全面回顾机器人操作领域生成学习模型的最新进展&#xff0c;并探讨该领域的关键挑战。机器人操作面临着关键瓶颈&#xff…...

Spring AI 核心概念

本文是对Spring AI中涉及到的AI相关核心概念的介绍&#xff0c;笔者结合LangChain、LlamaIndex的使用经验&#xff0c;尝试尽可能清晰的把这些概念解释清楚. 读者也可以参考官方文档作为补充. 模型 提到AI模型&#xff0c;我们的第一印象一定是GPT,DeepSeek这样的大语言模型(…...

第53.5讲 | 小项目实战:用 SHAP 值解释农作物产量预测模型 [特殊字符][特殊字符]

目录 ✅ 项目背景 &#x1f4e6; 所用工具 &#x1f4c1; 数据字段&#xff08;模拟&#xff09; &#x1f9d1;‍&#x1f4bb; 代码实现步骤 &#x1f3af; 解读与启发 &#x1f9e0; 项目拓展建议 ✅ 项目背景 我们使用一个简化的玉米产量数据集&#xff08;可模拟实…...

Linux编译器-gcc/g++使用

1.预处理&#xff08;进行宏替换&#xff09; -E开始进行程序编译&#xff0c;在预处理做完的时候&#xff0c;停下来 2.编译&#xff08;生成汇编&#xff09; -S 开始编译&#xff0c;编译做完了就停下来 3.汇编&#xff08;生成机器可识别代码&#xff09; -c 开始翻译汇编…...

SEO的关键词研究与优化 第二章

回顾上一篇文章, 3. 关键词评估和选择 关键词评估和选择是SEO策略中至关重要的一步。这个过程不仅仅是选择搜索量最高的词&#xff0c;而是要在多个因素之间找到平衡&#xff0c;以确定最有价值的关键词。 3.1 搜索量分析 搜索量是评估关键词潜力的首要指标&#xff0c;但它不应…...

数据结构数组

数组特点 内存是连续的,所以地址可以偏移&#xff0c;支持下标访问。 优点 下标访问&#xff08;随机访问&#xff09;的时间复杂度是O(1)&#xff0c;末尾增加和删除元素的时间复杂度是O(1)。 访问元素前后相邻位置方便&#xff0c;因为数组每个位置内存是连续的&#xff…...

vscode插件系列-2、认识vscode

​ 这一章&#xff0c;我将带你重新认识vscode 一、工作区划分 1、活动条&#xff08;Activity Bar&#xff09; 活动条是一个核心的导航&#xff0c;扩展可以通过在View Containers中配置&#xff0c;从而渲染Views中的视图。 具体来说就是在package.json中配置如下&…...

Java学习手册:TCP 协议基础

一、TCP 协议概述 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是一种面向连接的、可靠的、基于字节流的传输层通信协议&#xff0c;它在 IP 协议的基础上提供了可靠的 数据传输服务。TCP 通过三次握手建立连接&#xff0c;通过四次挥手…...

摘要 | 李录在北大光华管理学院的演讲《价值投资》

李录在北大光华管理学院的演讲《价值投资》是中文投资领域极具影响力的经典内容&#xff0c;尤其是2019年11月的演讲版本。该演讲视频时长90分钟&#xff0c;主要内容围绕价值投资的理论框架、实践难点以及在中国市场的应用展开。以下是该演讲的核心要点解析&#xff1a; 一、价…...

让Docker端口映射受Firewall管理而非iptables

要让Docker容器的端口映射受系统防火墙(如firewalld或ufw)管理&#xff0c;而不是直接通过iptables&#xff0c;可以按照以下步骤配置&#xff1a; 方法一&#xff1a;禁用Docker的iptables规则 &#xff08;1&#xff09;编辑Docker配置文件&#xff1a; vi /etc/docker/da…...

数据库数据删除与修改实验

数据库数据删除与修改实验 在数据库原理的学习中&#xff0c;数据的删除与修改是核心操作技能。通过“删除修改数据”实验&#xff0c;我系统实践了 SQL 中 UPDATE 和 DELETE 语句的多种应用场景&#xff0c;从基础语法到复杂业务逻辑处理&#xff0c;积累了丰富的实战经验。本…...

多回路电表如何革新电力监控?安科瑞技术深度解析

安科瑞顾强 安科瑞电气股份有限公司作为国内领先的能源管理方案提供商&#xff0c;其多回路智能电表系列&#xff08;如AMC200、AMC300L、ADW200-D10-4S等&#xff09;凭借多回路计量、高精度测量、无线物联等核心优势&#xff0c;在工业、商业及智能电网领域广泛应用。以下从…...

【云计算】云计算中IaaS、PaaS、SaaS介绍

0 随着云计算、大数据、人工智能发展迅速&#xff0c;布局“云”已经是互联网企业共识。云计算的服务类型分为三种&#xff0c;分别为IaaS、PaaS、SaaS&#xff0c;这三个分别是什么意思&#xff0c;今天做一个简单的介绍和了解。 一、云计算 云计算是用户需求通过Internet获…...

Ubuntu中选择Python虚拟环境

背景 在Ubuntu系统中&#xff0c;如果希望通过一个简单的命令&#xff08;例如activate&#xff09;快速查找并激活Python虚拟环境&#xff0c;是可以通过Bash脚本实现的。该脚本的核心功能包括&#xff1a;递归扫描用户家目录&#xff08;~&#xff09;中所有非隐藏文件夹&am…...

Nginx 安装与配置全流程指南(2025 最新版)

一、环境准备与依赖安装 1.1 系统要求 操作系统&#xff1a;支持主流 Linux 发行版&#xff08;Ubuntu 20.04/CentOS 7/Debian 10&#xff09;硬件配置&#xff1a;内存 ≥512MB&#xff0c;磁盘 ≥10GB 可用空间&#xff08;建议使用 SSD&#xff09;网络要求&#xff1a;开…...

WAMP设置外网访问

系统&#xff1a;windows 软件&#xff1a;wampserver 设置允许外网访问 1.修改apache的httpd-vhosts.config # Virtual Hosts # <VirtualHost _default_:80>ServerName localhostServerAlias localhostDocumentRoot "${INSTALL_DIR}/www"<Directory "…...