代码随想录-Day38
509. 斐波那契数
斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:
F(0) = 0,F(1) = 1
F(n) = F(n - 1) + F(n - 2),其中 n > 1
给定 n ,请计算 F(n) 。
示例 1:
输入:n = 2
输出:1
解释:F(2) = F(1) + F(0) = 1 + 0 = 1
示例 2:
输入:n = 3
输出:2
解释:F(3) = F(2) + F(1) = 1 + 1 = 2
示例 3:
输入:n = 4
输出:3
解释:F(4) = F(3) + F(2) = 2 + 1 = 3
方法一:
class Solution {public int fib(int n) {if (n < 2) return n;int a = 0, b = 1, c = 0;for (int i = 1; i < n; i++) {c = a + b;a = b;b = c;}return c;}
}
这段代码是使用Java编写的,实现了一个计算斐波那契数列第n项的函数。斐波那契数列定义为每个数字是前两个数字之和,通常以0和1开始。这里是一个详细解析:
函数签名
public int fib(int n)
该函数名为fib
,接受一个整数参数n
,返回计算出的斐波那契数列的第n
项。
函数逻辑
-
基本情况处理:
if (n < 2) return n;
如果
n
小于2(即n
为0或1),直接返回n
,因为斐波那契数列的前两项分别是0和1。 -
迭代计算斐波那契数:
初始化三个整数变量:int a = 0, b = 1, c = 0;
其中,
a
和b
用于存储当前要相加的两个斐波那契数,初始化为0和1;c
用于存储它们的和。接下来是一个
for
循环,从1遍历到n-1
(因为a
和b
已经表示了第一项和第二项):for (int i = 1; i < n; i++) {c = a + b;a = b;b = c; }
在每次循环中,先计算
a
和b
的和赋值给c
,然后将b
的值赋予a
,将c
的值赋予b
,这样a
和b
始终指向当前需要考虑的斐波那契数列的两项,而c
则保存了新的和。 -
返回结果:
循环结束后,c
中存储的就是斐波那契数列的第n
项,直接返回c
即可。
示例
例如,如果调用fib(6)
,函数会返回斐波那契数列的第6项,计算过程如下:
- 初始:
a=0, b=1, c=0
- 第1次循环后:
a=1, b=1, c=1
- 第2次循环后:
a=1, b=2, c=3
- 第3次循环后:
a=2, b=3, c=5
- 第4次循环后:
a=3, b=5, c=8
- 第5次循环后:
a=5, b=8, c=13
因此,fib(6)
返回13
。
方法二:
//非压缩状态的版本
class Solution {public int fib(int n) {if (n <= 1) return n; int[] dp = new int[n + 1];dp[0] = 0;dp[1] = 1;for (int index = 2; index <= n; index++){dp[index] = dp[index - 1] + dp[index - 2];}return dp[n];}
}
这段代码是使用Java语言实现的一个计算斐波那契数列第n项的函数。斐波那契数列是一个经典的数列,其中每一项都是前两项的和,通常以0和1开始。下面是这段代码的详细解释:
函数签名
public int fib(int n)
这个函数名为fib
,接收一个整数n
作为参数,返回斐波那契数列的第n
项。
函数逻辑
-
基本情况处理:
if (n <= 1) return n;
如果输入的
n
小于或等于1,根据斐波那契数列的定义,直接返回n
自身,因为fib(0)=0
且fib(1)=1
。 -
初始化动态规划数组:
int[] dp = new int[n + 1]; dp[0] = 0; dp[1] = 1;
创建一个长度为
n+1
的数组dp
来存储斐波那契数列的值,其中dp[0]=0
和dp[1]=1
对应斐波那契数列的前两项。 -
动态规划填充数组:
for (int index = 2; index <= n; index++){dp[index] = dp[index - 1] + dp[index - 2]; }
从索引2开始遍历到
n
(包含n
),使用循环依次计算并存储斐波那契数列的每一项。每一项dp[index]
的值由前两项dp[index - 1]
和dp[index - 2]
的和计算得出,这是斐波那契数列的基本定义。 -
返回结果:
return dp[n];
在循环结束后,数组
dp
的最后一个元素dp[n]
即为斐波那契数列的第n
项,所以直接返回该值。
示例
比如,如果调用fib(6)
,函数会计算并返回斐波那契数列的第6项,即0, 1, 1, 2, 3, 5, 8
中的8
。
这种方法称为动态规划,相较于递归解法,它避免了重复计算,提高了效率,特别是在计算较大的n
时更为明显。
70. 爬楼梯
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
示例 1:
输入:n = 2
输出:2
解释:有两种方法可以爬到楼顶。
- 1 阶 + 1 阶
- 2 阶
示例 2:
输入:n = 3
输出:3
解释:有三种方法可以爬到楼顶。
- 1 阶 + 1 阶 + 1 阶
- 1 阶 + 2 阶
- 2 阶 + 1 阶
方法一:
// 常规方式
public int climbStairs(int n) {int[] dp = new int[n + 1];dp[0] = 1;dp[1] = 1;for (int i = 2; i <= n; i++) {dp[i] = dp[i - 1] + dp[i - 2];}return dp[n];
}
这段代码是使用Java语言实现的一种动态规划方法,用于解决“爬楼梯”问题。问题描述如下:假设你正在爬一个楼梯,每次你可以爬1阶或者2阶。给定楼梯的总阶数n,返回爬到楼顶的方法总数。
代码解析
-
初始化: 创建一个长度为
n + 1
的整型数组dp
,用来存储爬到各个阶梯的方法数。dp[0]
和dp[1]
都初始化为1,表示爬到第0阶有1种方法(即不爬),爬到第1阶也有1种方法(直接爬一阶上去)。 -
状态转移方程: 对于
dp[i]
(其中i >= 2
),可以根据状态转移方程dp[i] = dp[i - 1] + dp[i - 2]
来计算,即爬到第i
阶的方法数等于爬到第i - 1
阶的方法数加上爬到第i - 2
阶的方法数。这是因为到达第i
阶,要么是从第i - 1
阶爬一阶上来,要么是从第i - 2
阶爬两阶上来。 -
返回结果: 最终,
dp[n]
就是爬到第n
阶楼梯的方法总数,因此返回dp[n]
作为答案。
举例说明
假设n = 3
,即有3阶楼梯,按照代码逻辑计算过程如下:
dp[0] = 1
,dp[1] = 1
- 计算
dp[2]
时,dp[2] = dp[1] + dp[0] = 1 + 1 = 2
,表示到第2阶有2种方法(1+1 或者 2)。 - 计算
dp[3]
时,dp[3] = dp[2] + dp[1] = 2 + 1 = 3
,表示到第3阶有3种方法(1+1+1, 1+2, 或者 2+1)。
因此,当n = 3
时,返回的结果是3,即有3种不同的方法爬到楼顶。
方法二:
// 用变量记录代替数组
class Solution {public int climbStairs(int n) {if(n <= 2) return n;int a = 1, b = 2, sum = 0;for(int i = 3; i <= n; i++){sum = a + b; // f(i - 1) + f(i - 2)a = b; // 记录f(i - 1),即下一轮的f(i - 2)b = sum; // 记录f(i),即下一轮的f(i - 1)}return b;}
}
这段代码是使用Java语言实现的一个简化版的动态规划方法来解决“爬楼梯”问题。与之前使用数组记录每个阶梯的方法数不同,这里仅使用了三个变量a
、b
和sum
来减少空间复杂度,达到了O(1)的空间复杂度要求,而时间复杂度仍然是O(n)。下面是代码的详细解释:
代码逻辑解析
-
基础情况处理: 如果输入的阶数
n
小于等于2,直接返回n
,因为当只有1阶或2阶楼梯时,方法数分别为1和2。 -
变量初始化: 定义三个整型变量
a
、b
和sum
,其中a
和b
分别初始化为1和2,对应爬到第一阶和第二阶楼梯的方法数。sum
用来临时存储每轮循环中爬到当前阶的方法数。 -
循环计算: 从第三阶楼梯(
i = 3
)开始计算,直到目标阶数n
。在每次循环中:- 计算
sum = a + b
,即当前阶的方法数等于前一阶的方法数加上前两阶的方法数。 - 更新
a = b
,把当前的b
值(即上一阶的方法数)赋给a
,为下一轮计算做准备。 - 更新
b = sum
,把刚计算出来的sum
(当前阶的方法数)赋给b
,为下一轮计算做准备。
- 计算
-
返回结果: 循环结束后,变量
b
中存储的就是爬到n
阶楼梯的方法总数,直接返回b
。
举例说明
假设我们要计算爬5阶楼梯的方法数,过程如下:
- 初始:
a = 1
(到第1阶的方法数),b = 2
(到第2阶的方法数)。 - 第一轮计算(阶数3):
sum = a + b = 1 + 2 = 3
,更新后a = 2
,b = 3
。 - 第二轮计算(阶数4):
sum = a + b = 2 + 3 = 5
,更新后a = 3
,b = 5
。 - 第三轮计算(阶数5):
sum = a + b = 3 + 5 = 8
,此时b
即为爬到第5阶的方法数。
最终返回b = 8
,表示有8种不同的方法可以爬到5阶楼梯的顶部。
746. 使用最小花费爬楼梯
给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。
你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。
请你计算并返回达到楼梯顶部的最低花费。
示例 1:
输入:cost = [10,15,20]
输出:15
解释:你将从下标为 1 的台阶开始。
- 支付 15 ,向上爬两个台阶,到达楼梯顶部。
总花费为 15 。
示例 2:
输入:cost = [1,100,1,1,1,100,1,1,100,1]
输出:6
解释:你将从下标为 0 的台阶开始。
- 支付 1 ,向上爬两个台阶,到达下标为 2 的台阶。
- 支付 1 ,向上爬两个台阶,到达下标为 4 的台阶。
- 支付 1 ,向上爬两个台阶,到达下标为 6 的台阶。
- 支付 1 ,向上爬一个台阶,到达下标为 7 的台阶。
- 支付 1 ,向上爬两个台阶,到达下标为 9 的台阶。
- 支付 1 ,向上爬一个台阶,到达楼梯顶部。
总花费为 6 。
方法一:
// 方式一:第一步不支付费用
class Solution {public int minCostClimbingStairs(int[] cost) {int len = cost.length;int[] dp = new int[len + 1];// 从下标为 0 或下标为 1 的台阶开始,因此支付费用为0dp[0] = 0;dp[1] = 0;// 计算到达每一层台阶的最小费用for (int i = 2; i <= len; i++) {dp[i] = Math.min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]);}return dp[len];}
}
这段Java代码是解决“最小成本爬楼梯”问题的一个实现。给定一个非负整数数组 cost
,其中 cost[i]
是爬到第 i
阶楼梯的成本。一旦你支付了爬到某阶楼梯的成本,就可以选择不再支付直接爬到更高一层或者爬两层。该函数的目标是计算达到顶层楼梯的最低花费。这里采用的是自底向上的动态规划方法。
代码解析:
-
初始化:首先,定义数组
dp
来存储到达每个楼层的最小成本,数组长度为len + 1
,因为我们要计算到达最后一阶楼梯之上(即到达顶层)的成本。初始化dp[0]
和dp[1]
为0,意味着从地面(下标0)或第一个台阶(下标1)开始爬,不需要额外支付费用。 -
动态规划状态转移:遍历从下标2到
len
(包括len
),对于每个位置i
,有两种方式到达:一是从i-1
阶楼梯爬上来,二是从i-2
阶楼梯爬上来。因此,到达第i
阶楼梯的最小成本可以通过比较这两种方式的成本并取最小值得到,即dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2])
。 -
返回结果:遍历结束后,
dp[len]
存储的就是到达顶层楼梯的最小成本,直接返回这个值。
示例说明:
假设 cost = [10, 15, 20]
,表示爬到第一阶楼梯成本为0(根据初始化逻辑),第二阶为10,第三阶为15。按照上述逻辑计算:
dp[2] = min(dp[1] + cost[1], dp[0] + cost[0]) = min(0 + 10, 0 + 0) = 10
dp[3] = min(dp[2] + cost[2], dp[1] + cost[1]) = min(10 + 20, 0 + 15) = 15
因此,到达顶层(即第三阶楼梯之上)的最小成本为15,这就是函数的返回值。
方法二:
// 方式二:第一步支付费用
class Solution {public int minCostClimbingStairs(int[] cost) {int[] dp = new int[cost.length];dp[0] = cost[0];dp[1] = cost[1];for (int i = 2; i < cost.length; i++) {dp[i] = Math.min(dp[i - 1], dp[i - 2]) + cost[i];}//最后一步,如果是由倒数第二步爬,则最后一步的体力花费可以不用算return Math.min(dp[cost.length - 1], dp[cost.length - 2]);}
}
这段Java代码也是解决“最小成本爬楼梯”问题的一个实现,但与之前的方式稍有不同。这里是假设从第一阶楼梯开始就需要支付费用,然后采用动态规划的方法来求解到达顶层楼梯的最小花费。具体解析如下:
代码解析:
-
初始化:首先,定义一个长度与输入数组
cost
相同的数组dp
,用来存储到达每个阶梯时的最小花费。初始化dp[0]
和dp[1]
分别为cost[0]
和cost[1]
,表示从地面到第一阶和到第二阶的花费。 -
动态规划状态转移:从下标为2的位置开始遍历至数组末尾(不包括),对于每一个位置
i
,到达此处的最小花费等于前一阶梯的最小花费和前前一阶梯的最小花费中的较小者,再加上当前位置i
的花费。即dp[i] = min(dp[i - 1], dp[i - 2]) + cost[i]
。这样做是为了确保以最少的花费到达当前阶梯。 -
返回结果:到达顶层楼梯有两种情况,一种是从倒数第一阶直接上,一种是从倒数第二阶上。因此,返回
dp[cost.length - 1]
和dp[cost.length - 2]
中的较小值,即为最小成本。注意,这里最后一步不额外计算费用,因为到达倒数第二阶时,已经计算了到达顶层所需的最小花费。
示例说明:
如果 cost = [10, 15, 20]
,则:
dp[0] = 10
dp[1] = 15
- 遍历过程中,
dp[2] = min(dp[1], dp[0]) + cost[2] = min(15, 10) + 20 = 10 + 20 = 30
最后,Math.min(dp[2], dp[1]) = Math.min(30, 15)
,因此返回 15
作为最小成本。
这种方式同样高效地解决了问题,但注意其假设前提与之前的方式不同,是从第一阶开始就需要支付费用。
方法三:
// 状态压缩,使用三个变量来代替数组
class Solution {public int minCostClimbingStairs(int[] cost) {// 以下三个变量分别表示前两个台阶的最少费用、前一个的、当前的。int beforeTwoCost = 0, beforeOneCost = 0, currentCost = 0;// 前两个台阶不需要费用就能上到,因此从下标2开始;因为最后一个台阶需要跨越,所以需要遍历到cost.lengthfor (int i = 2; i <= cost.length; i ++) {// 此处遍历的是cost[i - 1],不会越界currentCost = Math.min(beforeOneCost + cost[i - 1], beforeTwoCost + cost[i - 2]);beforeTwoCost = beforeOneCost;beforeOneCost = currentCost;}return currentCost;}
}
这段Java代码是解决“最小成本爬楼梯”问题的另一种实现,采用了状态压缩的方法,即使用三个变量而不是数组来存储到达每个阶梯所需的最小成本。这种方式减少了空间复杂度,但仍然保持了动态规划的思想。下面是详细的解析:
代码解析:
-
变量定义:定义三个整型变量
beforeTwoCost
、beforeOneCost
和currentCost
,分别代表到达前两个台阶、前一个台阶和当前台阶的最小成本。初始时,前两个台阶和前一个台阶的最小成本都设为0,因为题目中并没有明确指出从第一个台阶开始就有费用,但根据逻辑推断,此处默认从地面到第一个和第二个台阶是免费的,或者理解为beforeTwoCost
和beforeOneCost
是站在第一阶和第二阶的费用,自然为0。 -
循环遍历:从
i = 2
开始遍历至cost.length
(包含cost.length
,意味着考虑到达顶层楼梯后的状态),这一步是基于从地面(下标0)或第一个台阶(下标1)出发的逻辑,但因为cost
数组的下标是从0开始的,所以计算时访问的是cost[i - 1]
和cost[i - 2]
。 -
状态转移:在每次循环中,计算到达当前台阶的最小成本
currentCost
,通过比较从上一个台阶和前一个台阶到达当前台阶的最小花费。具体来说,currentCost = Math.min(beforeOneCost + cost[i - 1], beforeTwoCost + cost[i - 2])
,表示当前到达的阶梯可以通过上一个阶梯或跳过一个阶梯从更早的阶梯到达,选择其中成本较小的路径。 -
状态更新:更新
beforeTwoCost
和beforeOneCost
的值,为下一次迭代做准备。即将当前的beforeOneCost
赋值给beforeTwoCost
,将刚刚计算的currentCost
赋值给beforeOneCost
。 -
返回结果:循环结束后,
currentCost
即为到达顶层楼梯所需的最小成本,直接返回。
示例说明:
如果输入数组cost = [10, 15, 20]
,则遍历过程如下:
- 初始化:
beforeTwoCost = 0
,beforeOneCost = 0
- 第一轮计算(
i = 2
):currentCost = min(0 + 10, 0 + 0) = 10
,更新后beforeTwoCost = 0
,beforeOneCost = 10
- 第二轮计算(
i = 3
):currentCost = min(10 + 15, 0 + 20) = 20
,更新后beforeTwoCost = 10
,beforeOneCost = 20
遍历结束,currentCost = 20
即为最小成本,因此返回20。
相关文章:

代码随想录-Day38
509. 斐波那契数 斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: F(0) 0,F(1) 1 F(n) F(n - 1) F(n - 2),其中 …...

CSS阴影优化气泡框样式
<body> <div class"pop">气泡框</div> </body>body{display: flex;justify-content: center;align-items: center;height: 100% } .pop{display: flex;justify-content: center;align-items: center;background: #409eff;width: 150px;heigh…...

强化安全新篇章:韶关石油化工可燃气体报警器年检解析
韶关,这座位于广东省北部的城市,近年来在石油化工行业取得了显著的发展。 随着一批批大型石化企业的进驻和投产,韶关不仅成为了区域性的石化产业基地,也为地方经济带来了强劲的增长动力。 然而,随着石化产业的快速发…...

Centos7 Docker部署PgSQL
拉取镜像 docker pull postgres:14.7运行容器 docker run --restartalways --nethost --shm-size"2g" --name pgsql -v /home/postgresql/data/pgdata:/var/lib/postgresql/data -v /etc/localtime:/etc/localtime -e POSTGRES_PASSWORDtest2023 -d postgres:14…...

LeetCode:经典题之21、24 题解及延伸
系列目录 88.合并两个有序数组 52.螺旋数组 567.字符串的排列 643.子数组最大平均数 150.逆波兰表达式 61.旋转链表 160.相交链表 83.删除排序链表中的重复元素 389.找不同 1491.去掉最低工资和最高工资后的工资平均值 896.单调序列 206.反转链表 92.反转链表II 141.环形链表 …...

【C++11】initializer_list详解!
一、什么是initializer_list? nitializer_list 是一种C11新的类型特性,它允许我们以统一的方式初始化对象。它是一个代表数组的轻量级包装器,通常用于构造函数和函数参数中,以允许传递一个初始化元素列表。 initializer_list也是一种模板类…...

如何在Java中处理UnsupportedOperationException异常?
如何在Java中处理UnsupportedOperationException异常? 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在Java编程中,我们经常会遇到各…...

WPS没保存关闭了怎么恢复数据?4个方法(更新版)
想象一下,你正在用WPS奋笔疾书,灵感如泉水般涌出,突然间,电脑却跟你开了个玩笑——啪地一下,文档未保存就关闭了!是不是感觉像是被泼了一盆冷水,所有的热情瞬间熄灭?别急,…...

elementplus el-table(行列互换)转置
Element Plus v2.4.0, repl v3.4.0 <template> <div><el-table :data"tableData" style"width: 100%"><el-table-column prop"name" label"名字" width"180" /><el-table-column prop"wei…...

Gradle 核心之 Task
一、前言 只有 Task 才可以在 Gradle 的执行阶段去执行(其实质是执行的 Task 中的一系列 Action),所以 Task 的重要性不言而喻。 二、Task 2.1 Task 定义与配置 Task 的定义方式有如下两种: Task 的配置方式也有如下两种…...

【React 】折叠面板,点击展开时再请求数据
需求背景:使用折叠面板的形式展示数据,面板内部数据需要在打开时请求接口获取。 遇到问题:最开始使用Antd 的折叠面板组件,它对于数据直接渲染是没问题的,但是不好满足打开面板时再动态加载数据的需求,于是…...

c++学习 文件操作,模板
文件操作 #include<iostream> #include<string> #include<fstream> using namespace std; //文本操作 //程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放 //通过文件可以数据持久化 //c中对文件操作包含头文件<fstream> /…...

开源与在线 M3U8 Downloader 项目介绍及使用指南
M3U8 是一种用于播放列表格式的文件类型,广泛应用于流媒体服务中,特别是 HLS(HTTP Live Streaming)协议。它包含了一系列的 TS(Transport Stream)视频片段地址,使得视频能够分段加载,…...

正则表达式与文本处理器
正则表达式 基础正大表达式 查看特定字符 grep grep-n the test.txt grep-in the test.txt-n 显示行号 -i 不区分大小写 -v 反转查找 [] :中括号里可以写元素,内容符合任意元素,就会过滤出来 ^ :写在中括号里,代表取反。以^开头&…...

RedisTemplate方法一览表
数据类型RedisTemplate 方法Redis命令解释应用场景stringopsForValue().set(key, value)SET设置存储在指定 key 下的值存储简单数据,如用户的设置、配置项opsForValue().get(key)GET获取存储在指定 key 下的值读取存储的数据,如用户信息、配置参数opsFor…...

个人对devops的一点见解
DevOps 是一种将开发(Development)和运维(Operations)相结合的理念和实践方法。 它强调打破开发团队和运维团队之间的传统壁垒,促进两个团队之间更紧密的协作和沟通,以实现更高效、更快速、更可靠的软件交付…...

HarmonyOS鸿蒙应用开发基础知识
参考 HarmonyOS鸿蒙应用开发 (二、应用程序包结构理解及Ability的跳转,与Android的对比)_hap(harmonyos ability package)包的开发-CSDN博客 HarmonyOS NEXT下一代编程语言仓颉介绍及入门-CSDN博客...

Halcon 根据霍夫变换在图像中寻找直线
一 霍夫变换 1 定义 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一.几何形状包括圆,椭圆,直线等等. 2 直线方程 直线的方程可以用yk*xb 来表示,其中k和b是参数,分别是斜率和截距; 3 霍夫变换原理: 设…...

基于Openmv的追小球的云台
介绍 在这篇文章,我会先介绍需要用到且需要注意的函数,之后再给出整体代码 在追小球的云台中,比较重要的部分就是云台(实质上就是舵机)的控制以及对识别的色块位置进行处理得到相应信息后控制云台进行运动 1、舵机模…...

关于scrapy模块中setting.py文件的介绍
作用 在Scrapy框架中,settings.py 文件起着非常重要的作用,它用于配置和控制整个Scrapy爬虫项目的行为、性能和功能。 setting.py文件的介绍 # Scrapy settings for haodaifu project # # For simplicity, this file contains only settings consider…...

laravel Blade 指令的趣味性
首先,我们通过几个要点来解释 Blade 引擎的工作原理。 您选择一个 Blade 模板进行渲染。引擎使用一系列正则表达式来解析和编译模板。该引擎生成一个普通的 PHP 文件并将其写入磁盘(以便将其缓存以供将来渲染)。包含 PHP 文件并使用输出缓冲…...

【面试题】等保(等级保护)的工作流程
等保(等级保护)的工作流程主要包括以下几个步骤,以下将详细分点介绍: 系统定级: 确定定级对象:根据《信息系统等级保护管理办法》和《信息系统等级保护定级指南》的要求,确定需要进行等级保护的…...

python调用麦克风和扬声器,并调用阿里云实时语音转文字
import time import queue import sounddevice as sd import numpy as np import nls import sys# 阿里云配置信息 URL "wss://nls-gateway-cn-shanghai.aliyuncs.com/ws/v1" TOKEN "XXXX" # 参考https://help.aliyun.com/document_detail/450255.html获…...

描述在React中集成第三方库(如Redux或React Router)的常见模式。
在React中集成第三方库,如状态管理库Redux或路由库React Router,通常遵循一些常见的模式和最佳实践。下面是一些集成这些库的步骤和模式: 集成Redux 安装Redux及相关包: 安装Redux及其中间件(如redux-thunk或redux-saga…...

JavaScript语法特性篇-空值合并运算符(??)
1、基本使用 空值合并运算符(??)英文名称为 Nullish coalescing operator,是一个逻辑运算符。 特性:当左侧的操作数为 null 或者 undefined 时,返回其右侧操作数,否则返回左侧操作数。 const foo nul…...

rancher快照备份至S3
巧用rancher的S3快照备份功能,快速实现集群复制、集群转移、完全崩溃后的极限修复 1.进入集群管理,在对应的集群菜单后,点击编辑配置 2.选择ETCD,启用,Backup Snapshots to S3选项 并填入你的minio 3 配置成功后 手…...

ChatGPT API教程在线对接OpenAI APIKey技术教程
一、OpenAI基本库介绍 您可以通过 HTTP 请求与 API 进行交互,这可以通过任何编程语言实现。我们提供官方的 Python 绑定、官方的 Node.js 库,以及由社区维护的库。 要安装官方的 Python 绑定,请运行以下命令: pip install open…...

随心而遇,跟着感觉走
分数限制下,选好专业还是选好学校? 24年高考结束,很多学生犹豫选择专业还是好学校,我的建议是,选择好学校。 本人体验来说,电子,工地,计科,数学,工科相关的…...

LeetCode题练习与总结:只出现一次的数字--136
一、题目描述 给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。 示例 1 : …...

常见的中间件都在解决什么问题?
常见的中间件都在解决什么问题 RocketMQ RocketMQ 是一款功能强大的分布式消息系统。 RocketMQ 源码地址:https://github.com/apache/rocketmq(opens new window) RocketMQ 官方网站:https://rocketmq.apache.org 什么场景下用 RocketMQ?…...