力扣每日打卡 1922. 统计好数字的数目 (中等)
力扣 1922. 统计好数字的数目 中等
- 前言
- 一、题目内容
- 二、解题方法
- 1. 暴力解法(会超时,此法不通)
- 2. 快速幂运算
- 3. 组合计数的思维
- 逻辑分析
- 组合计数的推导
- 例子分析
- 思维小结论
- 4.官方题解
- 4.1 方法一:快速幂
- 三、快速幂运算
- 快速幂运算(Exponentiation by Squaring)
- 基本思想
- 算法实现(②③为非递归)
- ① 递归运算
- ② 普通 除模运算(不带 **模数** 与 带 **模数**)
- ③ 按位与运算
- 使用示例
- 示例代码
- 复杂度分析
- 小结论
- 四、JS的大数运算
- 1. 数字精度限制
- 2. 大数解决方案
- 2.1. 使用 BigInt
- 2.2. 使用第三方库
- 2.3. 总结
- 2.4 补充:本题使用大数运算的例子
前言
这是刷算法题的第十一天,用到的语言是JS
题目:力扣 1922. 统计好数字的数目 (中等)
一、题目内容
我们称一个数字字符串是 好数字 当它满足(下标从 0 开始)偶数 下标处的数字为 偶数 且 奇数 下标处的数字为 质数 (2,3,5 或 7)。
比方说,“2582” 是好数字,因为偶数下标处的数字(2 和 8)是偶数且奇数下标处的数字(5 和 2)为质数。但 “3245” 不是 好数字,因为 3 在偶数下标处但不是偶数。
给你一个整数 n ,请你返回长度为 n 且为好数字的数字字符串 总数 。由于答案可能会很大,请你将它对 109 + 7 取余后返回 。
一个 数字字符串 是每一位都由 0 到 9 组成的字符串,且可能包含前导 0 。
示例 1:
输入:n = 1
输出:5
解释:长度为 1 的好数字包括 “0”,“2”,“4”,“6”,“8” 。
示例 2:
输入:n = 4
输出:400
示例 3:
输入:n = 50
输出:564908303
提示:
1 <= n <= 1015
二、解题方法
1. 暴力解法(会超时,此法不通)
- 遍历所有长度为n的数字字符串,判断是否为好数字
- 好数字的偶数下标处的数字为偶数且奇数下标处的数字为质数
- 时间复杂度为O(n),空间复杂度为O(1)
- 由于n的范围较大,暴力解法会超时,所以需要优化
代码如下(实例):
*** @param {number} n* @return {number}*/
var countGoodNumbers = function (n) {// 暴力解法let count = 0for(let i = 0; i.toString().length <= n; i++) {if (i.toString().length === n) {const si = i.toString() // 将数字转换为字符串if (si.length > n) returnfor (let j = 0; j < si.length; j++) {let access = false // 如果每一位数字都通过,则数量+1if (j % 2 === 0 && si[j] % 2 === 0) access = trueelse breakif( j > 10 ) {if (j % 2 && (si[j] % 2 === 2 || si[j] % 2 === 3 || si[j] % 2 === 5 || si[j] % 2 === 7)) access = trueelse break}if (access) count++}}}return count % (10 ** 9 + 7)
}// console.log(countGoodNumbers(1)) // 5 正确,也会打印,但也仅此而已
// console.log(countGoodNumbers(8)) // 40000000 正确,也会打印,但也仅此而已
// console.log(countGoodNumbers(9)) // 400000000正确,但是不会打印,可能直接超时了,或者打印时间非常慢
2. 快速幂运算
涉及到JS的 大数运算(关于大数运算的补充在下面有)
代码如下(示例):(使用了JS的 大数运算 )
/*** @param {number} n* @return {number}*/
var countGoodNumbers = function (n) {// 此题无法使用暴力算法const MOD = BigInt(10 ** 9 + 7)// ai得到的逻辑思维:// 一个长度为n的字符串,偶数位置可以有02468五种选择,奇数位置可以有2357四种选择// 因此对其进行排列组合,可以得到好数字的个数一共是 (符合偶数位置的数字的个数 * 符合奇数位置的数字的个数)// 即 (5^evenFuhe) * (4^oddFuhe)const evenCount = BigInt(Math.ceil(n / 2)) // 偶数下标的数量const oddCount = BigInt(Math.floor(n / 2)) // 奇数下标的数量const count = (Fuhe(5n, evenCount, MOD) * Fuhe(4n, oddCount, MOD)) % MODreturn Number(count)
}// 快速幂运算的函数实现
const Fuhe = ( a, b, mod ) => {let ans = 1na = a % modwhile(b) {if( b & 1n) ans = (a * ans) % moda = (a * a) % modb >>= 1n}return ans
}
代码:(下面的代码没有使用JS的 大数运算,会出现精准度问题)
/*** @param {number} n* @return {number}*/
var countGoodNumbers2 = function (n) {// 此题无法使用暴力算法const MOD = 10 ** 9 + 7// ai得到的逻辑思维:// 一个长度为n的字符串,偶数位置可以有02468五种选择,奇数位置可以有2357四种选择// 因此对其进行排列组合,可以得到好数字的个数一共是 (符合偶数位置的数字的个数 * 符合奇数位置的数字的个数)// 即 (5^evenFuhe) * (4^oddFuhe)const evenCount = Math.ceil(n / 2) // 偶数下标的数量const oddCount = Math.floor(n / 2) // 奇数下标的数量const count = (Fuhe(5, evenCount, MOD) * Fuhe(4, oddCount, MOD)) % MODreturn count
}
const Fuhe = ( a, b, mod ) => {let ans = 1a = a % modwhile(b) {if( b & 1) ans = (a * ans) % moda = (a * a) % modb >>= 1// b = Math.floor(b / 2) }return ans
}
console.log(countGoodNumbers2(50)) // 应该是564908303,而非564908313,但是打印的是564908313
3. 组合计数的思维
理解这个问题的数学思维需要我们从组合计数的角度出发,分析如何在特定的约束下选择数字字符串。以下是分析的详解:
逻辑分析
-
字符串结构:
- 我们需要生成的字符串长度为 ( n )。
- 字符串的下标为 ( 0 ) 到 ( n-1 )。
-
下标分类:
- 偶数下标(如 0, 2, 4, …)和奇数下标(如 1, 3, 5, …)之间有不同的限制条件。
- 偶数下标位置的数字必须是偶数。
- 奇数下标位置的数字必须是质数。
-
可能的选项:
- 偶数的选择: 偶数下标的位置可以选择的数字有 0, 2, 4, 6, 8,共 5 种选择。
- 质数的选择: 奇数下标的位置可以选择的质数有 2, 3, 5, 7,共 4 种选择。
组合计数的推导
-
偶数下标的数量:
- 在一个长度为 ( n ) 的字符串中,偶数下标的数量可以通过 evenCount = ⌈n / 2⌉计算得出。
- 这表示当 ( n ) 为奇数时,偶数下标数量会比奇数下标数量多 1。
- 在一个长度为 ( n ) 的字符串中,偶数下标的数量可以通过 evenCount = ⌈n / 2⌉计算得出。
-
奇数下标的数量:
- 奇数下标的数量可以通过 oddCount = ⌊ n / 2 ⌋计算得出。
- 这表示当 ( n ) 为偶数时,偶数下标和奇数下标数量相等。
- 奇数下标的数量可以通过 oddCount = ⌊ n / 2 ⌋计算得出。
-
总组合数的计算:
- 对于每一个偶数下标,我们有 5 种选择(偶数)。
- 对于每一个奇数下标,我们有 4 种选择(质数)。
- 最终的好数字字符串数量可以通过将偶数下标的选择和奇数下标的选择相乘得到:
goodNumbers = 5evenCount × 4oddCount
例子分析
假设 ( n = 4 ):
- 字符串有长度 4,下标为 0, 1, 2, 3。
- 偶数下标(0 和 2): 2 个位置,每个位置可以选择【0, 2, 4, 6, 8】中的任意一个,即 5 种选择。
- 奇数下标(1 和 3): 2 个位置,每个位置可以选择【2, 3, 5, 7】中的任意一个,即 4 种选择。
因此,字符串的组合数是:
goodNumbers = 52 × 42 = 25 × 16 = 400
思维小结论
通过这样的数学推理,我们能够清楚地理解在给定的条件下,为什么能够将问题转换为计算选项的排列组合。在面对其他类似的问题时,这种分解和组合的思维方式可以帮助我们有效解决复杂问题。
4.官方题解
4.1 方法一:快速幂
思路与算法:
对于偶数下标处的数字,它可以为 0,2,4,6,8 共计 5 种,而长度为 n 的数字字符串有 ⌊ n+1 / 2 ⌋ 个偶数下标,其中 ⌊x⌋ 表示对 x 向下取整。
对于奇数下标处的数字,它可以为 2,3,5,7 共计 4 种,而长度为 n 的数字字符串有 ⌊ n / 2 ⌋ 个奇数下标。
因此长度为 n 的数字字符串中,好数字的总数即为:
5^⌊ n+1 / 2 ⌋^ ⋅ 4^⌊ n / 2 ⌋^
在本题中,由于 n 的取值最大可以到 1015,如果通过普通的乘法运算直接求出上式中的幂,会超出时间限制,因此我们需要使用快速幂算法对幂的求值进行优化。
快速幂算法可以参考「50. Pow(x, n)」的官方题解。
代码如下(示例):
var countGoodNumbers = function(n) {const mod = 1000000007n;// 快速幂求出 x^y % modfunction quickmul(x, y) {let ret = 1n;let mul = x;while (y > 0) {if (y % 2n === 1n) {ret = (ret * mul) % mod;}mul = (mul * mul) % mod;y = y / 2n;}return ret;}return Number(quickmul(5n, BigInt(n + 1) / 2n) * quickmul(4n, BigInt(n) / 2n) % mod);
};作者:力扣官方题解
链接:https://leetcode.cn/problems/count-good-numbers/solutions/857968/tong-ji-hao-shu-zi-de-shu-mu-by-leetcode-53jj/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
- 复杂度分析:
- 时间复杂度:O(log n)。
- 空间复杂度:O(1)。
链接:力扣本题官方题解
来源:力扣(LeetCode)
三、快速幂运算
快速幂运算(Exponentiation by Squaring)
快速幂运算是一种高效计算 ( b^e ) 的算法,其中 ( b ) 是基数,( e ) 是指数。传统的逐步乘法方法的时间复杂度为 ( O(e) ),而快速幂运算的时间复杂度为 ( O(\log e) ),因此在处理大数时特别有效。
基本思想
快速幂运算的基本思想是利用平方和乘法来减少乘法的次数。其主要依据是:
- 如果指数 ( e ) 为偶数,则 ( b^e = (b{e/2})2 )
- 如果指数 ( e ) 为奇数,则 ( b^e = b \times b^{e-1} )
通过这种方式,可以在每次迭代中将指数减半,从而显著降低计算时间。
算法实现(②③为非递归)
以下是使用 JavaScript 实现的快速幂运算的代码:
① 递归运算
/** 不带模数* 快速幂运算* @param {number} base - 基数* @param {number} exp - 指数* @returns {number} */
function quickPow(base, exp) {if (exp === 0) {return 1; // 任何数的零次方为 1}if (exp % 2 === 0) {const half = quickPow(base, exp / 2);return half * half;} else {return base * quickPow(base, exp - 1);}
}
② 普通 除模运算(不带 模数 与 带 模数)
/** 不带模数* 快速幂运算* @param {number} a- 基数* @param {number} b- 指数* @returns {number} 计算结果 (a ^ b)*/
function quick (a, b) {let ans = 1while(b) { // 当指数存在的时候// 如果指数是奇数,则要先拉出来一个底数乘到最终结果上,其余步骤和偶数一样操作// 如果指数是偶数,则要底数平方,指数除以2(如果是使用按位与运算,则使用 "b >>= 1")b/2if(b % 2 === 1) ans *= aa *= ab = Math.floor(b / 2) // 注意一定要使用Math.floor(),否则会出现小数点,导致结束循环}return ans
}
console.log(quick(2, 7)) // 128/** 带模数* 快速幂运算* @param {number} base - 基数* @param {number} exp - 指数* @param {number} mod - 模数* @returns {number} 计算结果 (base^exp) % mod*/
const modExp = (base, exp, mod) => {let result = 1; // 初始化结果为 1base = base % mod; // 将基数在模数下取值while (exp > 0) {// 如果 exp 为奇数,将当前的 base 乘入结果if (exp % 2 === 1) result = (result * base) % mod;// 将 base 平方base = (base * base) % mod;// exp 右移,相当于整除 2exp = Math.floor(exp / 2);}return result; // 返回最终结果
}
③ 按位与运算
/** 不带模数* 快速幂运算* @param {number} a- 基数* @param {number} b- 指数* @returns {number} 计算结果 (a ^ b)*
function quick2 (a, b) {let ans = 1while(b) { // 当指数存在的时候// 如果指数是奇数,则要先拉出来一个底数乘到最终结果上,其余步骤和偶数一样操作// 如果指数是偶数,则要底数平方,指数除以2(如果是使用按位与运算,则使用 "b >>= 1")b/2if(b & 1) ans *= aa *= ab >>= 1 // b右移一位}return ans
}
console.log(quick2(2, 8)) // 256
使用示例
快速幂运算可以用于很多应用场景,包括计算大数的幂、加密算法、以及任何需要快速计算大数时。
示例代码
const MOD = 10 ** 9 + 7; // 定义模数console.log(modExp(2, 10, MOD)); // 输出: 1024
console.log(modExp(5, 3, MOD)); // 输出: 125
console.log(modExp(3, 7, MOD)); // 输出: 2187
console.log(modExp(10, 9, MOD)); // 输出: 1000000000
复杂度分析
- 时间复杂度: ( O(log e) ) — 每次操作将指数减半。
- 空间复杂度: ( O(1) ) — 仅使用常量级额外空间。
小结论
快速幂运算是一个非常实用且高效的算法,广泛应用于计算大数的幂以及各种算法中。了解并实现该算法可以显著提高程序运行效率,特别是在处理与模数运算相关的问题时。
四、JS的大数运算
JavaScript 在处理数字时,其默认的数值类型是基于 IEEE 754 标准的双精度浮点数。这个数值类型有一些限制,特别是在进行大数运算时。以下是 JavaScript 中大数运算的简单介绍:
1. 数字精度限制
-
安全整数: JavaScript 支持的安全整数范围是 (-2^{53} + 1) 到 (2^{53} - 1)(即
Number.MAX_SAFE_INTEGER
的值为 9007199254740991)。超出这个范围的整数计算可能会出现精度丢失(例如,9007199254740992
会变成9007199254740992
)。 -
浮点数问题: 由于浮点数的表示方式,某些小数(如
0.1
和0.2
的和)可能无法精确表示。
2. 大数解决方案
由于上述限制,处理大数运算时,可以考虑以下几种方案:
2.1. 使用 BigInt
从 ES2020 开始,JavaScript 引入了 BigInt
类型,用于表示任意大小的整数。你可以通过在数字后添加 “n” 来创建 BigInt:
const bigInt1 = BigInt(9007199254740992)
const bigInt2 = 12345678901234567890n // 后缀 "n" 表示 BigInt
const sum = bigInt1 + bigInt2 // 可以进行大数运算
console.log(sum) // 输出: 12345678901234567892nconsole.log(Number(sum)) // 输出: 12345678901234567892
2.2. 使用第三方库
如果你需要支持比 BigInt 更广泛的数值(比如更复杂的数学操作、浮点数等),可以使用大数运算库,例如:
- Decimal.js: 支持任意精度的十进制运算,适合处理小数。
- Big.js: 提供了对大浮点数的高精度运算支持。
- bignumber.js: 可以处理比较大的数值以及高精度的浮点数运算。
使用示例(以 decimal.js
为例):
const Decimal = require('decimal.js');const a = new Decimal(0.1);
const b = new Decimal(0.2);
const sum = a.plus(b); // 精确计算
console.log(sum.toString()); // 输出: "0.3"
2.3. 总结
在 JavaScript 中,大数运算可以通过 BigInt
来实现任意大小的整数计算,或使用第三方库来处理更复杂的场景(如浮点数和高精度计算)。在处理大数运算时,需要注意原生数值类型的限制,以确保计算的准确性。
2.4 补充:本题使用大数运算的例子
代码如下:
/*** @param {number} n* @return {number}*/
var countGoodNumbers = function (n) {// 此题无法使用暴力算法const MOD = BigInt(10 ** 9 + 7)// ai得到的逻辑思维:// 一个长度为n的字符串,偶数位置可以有02468五种选择,奇数位置可以有2357四种选择// 因此对其进行排列组合,可以得到好数字的个数一共是 (符合偶数位置的数字的个数 * 符合奇数位置的数字的个数)// 即 (5^evenFuhe) * (4^oddFuhe)const evenCount = BigInt(Math.ceil(n / 2)) // 偶数下标的数量const oddCount = BigInt(Math.floor(n / 2)) // 奇数下标的数量const count = (Fuhe(5n, evenCount, MOD) * Fuhe(4n, oddCount, MOD)) % MODreturn Number(count)
}// 快速幂运算的函数实现
const Fuhe = ( a, b, mod ) => {let ans = 1na = a % modwhile(b) {if( b & 1n) ans = (a * ans) % moda = (a * a) % modb >>= 1n}return ans
}
相关文章:
力扣每日打卡 1922. 统计好数字的数目 (中等)
力扣 1922. 统计好数字的数目 中等 前言一、题目内容二、解题方法1. 暴力解法(会超时,此法不通)2. 快速幂运算3. 组合计数的思维逻辑分析组合计数的推导例子分析思维小结论 4.官方题解4.1 方法一:快速幂 三、快速幂运算快速幂运算…...
宝塔Linux面板 - 添加站点建站时没有域名实现 IP 地址访问测试(宝塔面板建站 IP 访问)
前言 使用面板添加站点时,必须要填写一个域名用来指向程序,没有域名怎么办? 答案:域名直接写 【服务器 IP 地址】 操作步骤 如果还没有添加站点,则直接在创建站点的时候,域名那填写服务器地址即可&#…...
【GitHub探索】mcp-go,MCP协议的Golang-SDK
近期大模型Agent应用开发方面,MCP的概念比较流行,基于MCP的ToolServer能力开发也逐渐成为主流趋势。由于笔者工作原因,主力是Go语言,为了调研大模型应用开发,也接触到了mcp-go这套MCP的SDK实现。 对于企业内部而言&am…...
手撕TCP内网穿透及配置树莓派
注意: 本文内容于 2025-04-13 15:09:48 创建,可能不会在此平台上进行更新。如果您希望查看最新版本或更多相关内容,请访问原文地址:手撕TCP内网穿透及配置树莓派。感谢您的关注与支持! 之前入手了树莓派5,…...
人形机器人运动与操作: 控制、规划和学习方面的当前进展与挑战
前言 图 1:执行运动和操作任务的人形机器人:(a)HRP-4 在适应地形的同时擦拭木板[1];(b-g)Digit、Hector[2]、Atlas、H1、Justin[3]和 Apollo 取放物体;(h)iCu…...
C++ 重构muduo网络库
本项目参考的陈硕老师的思想 1. 基础概念 进程里有 Reactor、Acceptor、Handler 这三个对象 Reactor 对象的作用是监听和分发事件;Acceptor 对象的作用是获取连接;Handler 对象的作用是处理业务; 先说说 阻塞I/O,非阻塞I/O&…...
【计算机网络实践】(十二)大学校园网综合项目设计
本系列包含: (一)以太网帧分析与网际互联协议报文结构分析 (二)地址解析协议分析与传输控制协议特性分析 (三)交换机的基本操作、配置、 虚拟局域网配置和应用 (四)交…...
通过api程序的方式编辑ps的三种方式
目前只使用了第一种 ps-python-api去操作 还没有尝试其他两种方式对于第一种方式必须要开启ps程序,程序调用修改新增图层和文档时会同步到ps页面,可以直观看到修改结果...
论文阅读笔记——Reactive Diffusion Policy
RDP 论文 通过 AR 提供实时触觉/力反馈;慢速扩散策略,用于预测低频潜在空间中的高层动作分块;快速非对称分词器实现闭环反馈控制。 ACT、 π 0 \pi_0 π0 采取了动作分块,在动作分块执行期间处于开环状态,无法及时响…...
MySQL表的增删改查进阶版
Mysql 1、数据库的约束1.1约束类型1.2 NULL约束1.3 UNIQUE:唯一约束1.4 DEFAULT:默认值约束1.5 PRIMARY KEY:主键约束(重点)1.6 FOREIGN KEY:外键约束(重点) 2.表的设计2.1一对一2.2…...
【C#】Socket通信的使用
在C#中,Socket通信是一种用于实现网络通信的底层技术。通过Socket,程序可以在网络上与其他设备进行数据交换。以下是如何使用C#中的System.Net.Sockets命名空间来实现Socket通信的详细步骤。 1. Socket通信的基本概念 Socket: 一个Socket是网络通信的端…...
linux以C方式和内核交互监听键盘[香橙派搞机日记]
最近在深入研究我的香橙派,不可避免的遇到了怎么认识和使用Linux内核的问题。 我给自己留了一个简单的任务:使用原生C来监听内核,实现读取键盘的消息。 CSDN上也有其他文章来解决这个问题,不过要么是技术不达标(直接和…...
【C++初学】课后作业汇总复习(七) 指针-深浅copy
1、 HugeInt类:构造、、cout Description: 32位整数的计算机可以表示整数的范围近似为-20亿到+20亿。在这个范围内操作一般不会出现问题,但是有的应用程序可能需要使用超出上述范围的整数。C可以满足这个需求,创建功能强大的新的…...
【iOS】UIPageViewController学习
UIPageViewController学习 前言创建一个UIPageViewController最简单的使用 UIPageViewController的方法说明:效果展示 UIPageViewController的协议方法 前言 笔者最近在写项目时想实现一个翻书效果,上网学习到了UIPageViewController今天写本篇博客总结…...
GDB 调试命令详解:高效掌握常用调试技巧
🐞 GDB 调试命令详解:高效掌握常用调试技巧 GNU Debugger(GDB)是 Linux 下最强大的 C/C 调试工具。本文将系统梳理 GDB 的常用命令,覆盖运行控制、断点管理、变量查看、线程与进程调试等核心功能,助你快速掌…...
实验二 用递归下降法分析表达式实验
【实验目的】 1.掌握用递归下降分析法进行语法分析的方法。加深对自顶向下语法分析原理的理解。 2.掌握设计、编制并调试自顶向下语法分析程序的思想和方法。 3.本实验是高级语言程序设计、数据结构和编译原理中词法分析、自顶向下语法分析原理等知 识的综合。由于语法分析…...
【随身wifi】青龙面板保姆级教程
0.操作前必看 本教程基于Debian系统,从Docker环境。面板安装,到最后拉取脚本的使用。 可以拉库跑狗东京豆,elm红包等等,也可以跑写自己写的脚本,自行探索 重要的号别搞,容易黑号,黑号自己负责…...
从一到无穷大 #45:InfluxDB MCP Server 构建:从工程实践到价值重构
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权。 文章目录 工程实践遇到的问题MCP Host选择开发流程 结果展现可能性展望工作生活带来的变化 MCP…...
app逆向专题五:新快报app数据采集
app逆向专题五:新快报app数据采集 一、抓包寻找数据接口二、编写代码三、完整代码一、抓包寻找数据接口 打开charles,并在手机端打开新快报app,点击“广州”或者“经济”等选项卡,抓包,寻找数据接口,如图所示: 二、编写代码 这里介绍一种简便的代码编写方法,在数据…...
使用 lm-eval 评估模型时报错:TypeError: ‘NoneType’ object is not callable 的解决方案
问题描述 在使用 lm-evaluation-harness 进行多 GPU 模型评估时,使用如下命令: accelerate launch --multi-gpu --num_processes 2 \-m lm_eval --model hf \--model_args pretrained${local_model_path} \--tasks mmlu \--batch_size 8 \--log_sample…...
脉冲耦合神经网络(PCNN):图像处理中的强大工具
文章目录 一、PCNN 的起源与背景二、PCNN 的基本原理(一)模型结构(二)工作方式(三)动态阈值与脉冲特征三、PCNN 在图像处理中的应用(一)图像分割(二)边缘检测(三)纹理分析四、PCNN 的实现与优化环境准备PCNN 类定义图像分割示例在图像处理和计算机视觉领域,神经网…...
【Git】从零开始使用git --- git 的基本使用
哪怕是野火焚烧,哪怕是冰霜覆盖, 依然是志向不改,依然是信念不衰。 --- 《悟空传》--- 从零开始使用git 了解 Gitgit创建本地仓库初步理解git结构版本回退 了解 Git 开发场景中,文档可能会经历若干版本的迭代。假如我们不进行…...
React Hooks 的使用
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 🍚 蓝桥云课签约作者、…...
【NIO番外篇】之组件 Channel
目录 一、什么是NIO Channel?二、常见的Channel组件及其用法1. FileChannel2. SocketChannel3. ServerSocketChannel4. DatagramChannel 🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,可以多多支持一下&a…...
探秘 Ruby 与 JavaScript:动态语言的多面风采
1 语法特性对比:简洁与灵活 1.1 Ruby 的语法优雅 Ruby 的语法设计旨在让代码读起来像自然语言一样流畅。它拥有简洁而富有表现力的语法结构,例如代码块、符号等。 以下是一个使用 Ruby 进行数组操作的简单示例: # 定义一个数组 numbers [1…...
高频面试题(含笔试高频算法整理)基本总结回顾21
干货分享,感谢您的阅读! (暂存篇---后续会删除,完整版和持续更新见高频面试题基本总结回顾(含笔试高频算法整理)) 备注:引用请标注出处,同时存在的问题请在相关博客留言…...
深入浅出一下Python函数的核心概念与进阶应用
本篇技术博文摘要 🌟 本文系统梳理了Python函数的核心知识点,从基础概念到高级特性,构建了完整的函数编程知识体系。内容涵盖:变量作用域的局部与全局划分、函数注释的规范写法、参数传递中值与引用的区别、匿名函数的灵活应用&am…...
【漫话机器学习系列】198.异常值(Outlier)
异常值(Outlier)全面指南 —— 检测、分析与处理 作者:Chris Albon(图源) 场景:数据清洗与特征工程必备技能 一、什么是异常值(Outlier) 定义 异常值(Outlier࿰…...
React 记账本项目实战:多页面路由、Context 全局
在本文中,我们将分享一个使用 React 开发的「记账本」项目的实战经验。该项目通过 VS Code 完成,包含首页、添加记录页、编辑页等多个功能页面,采用了 React Router 实现路由导航,使用 Context API 管理全局的交易记录状态,并引入数据可视化组件呈现不同月份的支出情况。项…...
[React] 如何用 Zustand 构建一个响应式 Enum Store?附 RTKQ 实战与 TS 架构落地
[React] 如何用 Zustand 构建一个响应式 Enum Store?附 RTKQ 实战与 TS 架构落地 本文所有案例与数据为作者自行构建,所有内容均为技术抽象示例,不涉及任何实际商业项目 自从之前尝试了一下 zustand 之后,就发现 zustand 是一个轻…...
DeepSeek在职场办公中的高效指令运用与策略优化
摘要 随着人工智能技术的飞速发展,大型语言模型在各个领域的应用日益广泛。DeepSeek作为一款具有影响力的AI产品,为职场办公带来了新的变革与机遇。本文深入剖析DeepSeek在职场办公场景下的提示词指令运用,通过对提示词概念、作用、设计原则的…...
mysql事务脏读 不可重复读 幻读 事务隔离级别关系
看了很多文档,发现针对事务并发执行过程中的数据一致性问题,即脏读、不可重复读、幻读的解释一塌糊涂,这也不能说什么,因为官方SQL标准中的定义也模糊不清。 按照mysql中遵循的事务隔离级别,可以梳理一下其中的关系 隔…...
Fork/Join框架与线程池对比分析
Fork/Join框架与线程池对比分析 1. 概述 线程池(如ThreadPoolExecutor)是Java并发编程中用于管理线程生命周期的通用工具,适用于处理大量独立任务。Fork/Join框架(基于ForkJoinPool)是Java 7引入的专用框架ÿ…...
docker 安装 Gitlab
GitLab 安装 #创建容器数据卷映射目录 mkdir -p /usr/docker/gitlab/config mkdir -p /usr/docker/gitlab/logs mkdir -p /usr/docker/gitlab/data #目录授权 chmod 777 -R /usr/docker/gitlab/*#直接复制可用(记得改下宿主机ipv4,不知道怎么看,输入i…...
【贪心之摆动序列】
题目: 分析: 这里我们使用题目中给的第二个实例来进行分析 题目中要求我们序列当中有多少个摆动序列,摆动序列满足一上一下,一下一上,这样是摆动序列,并且要输出摆动序列的最长长度 通过上面的图我们可以…...
kubectl修改资源时添加注解
kubectl修改资源时添加注解 kubectl修改资源时添加注解老版本的注解(变化注解)删除Annotations查看Annotations信息 查看发布记录回滚 kubectl修改资源时添加注解 参考: 为什么我们要使用kubectl apply 修改资源时,在命令行后添加 --save-configtrue ,就会自动添加此次修改的…...
【C++初学】课后作业汇总复习(四) 复数类与运算符重载
1、复数类输出 如题,要求实现: 1、复数类含两个参数的构造函数,一个为实部,一个为虚部 2、用Show()现实复数的值。 输出 (23i) //如题,要求实现: // //1、复数类含两个参数的构造函数&…...
十四、C++速通秘籍—函数式编程
目录 上一章节: 一、引言 一、函数式编程基础 三、Lambda 表达式 作用: Lambda 表达式捕获值的方式: 注意: 四、函数对象 函数对象与普通函数对比: 五、函数适配器 1、适配普通函数 2、适配 Lambda 表达式 …...
复刻系列-星穹铁道 3.2 版本先行展示页
复刻星穹铁道 3.2 版本先行展示页 0. 视频 手搓~星穹铁道~展示页~~~ 1. 基本信息 作者: 啊是特嗷桃系列: 复刻系列官方的网站: 《崩坏:星穹铁道》3.2版本「走过安眠地的花丛」专题展示页现已上线复刻的网…...
阿里云备案有必要选择备案管家服务吗?自己ICP备案可以吗?
阿里云备案有必要选择备案管家服务吗?新手可以选择备案管家,备案管家不需要自己手动操作,可以高效顺利通过ICP备案。自己ICP备案可以吗?自己备案也可以的,也很简单,适合动手能力强的同学。 阿里云备案管家…...
SQL语言基础(二)--以postersql为例
上次教程我们讲述了数据库中的增,删,改语句,今天我们来学习最后一个–‘改’的语句。 1.select语法 数据库查询只有select一个句子,但select语法相对复杂,其功能丰富,使用方式也很灵活 SELECT [ALL|Dist…...
探索 Rust 语言:高效、安全与并发的完美融合
在当今的编程语言领域,Rust 正以其独特的魅力吸引着越来越多开发者的目光。它诞生于 Mozilla 实验室,旨在解决系统编程中长久以来存在的难题,如今已成为构建可靠、高效软件的有力工具。 1 内存安全 Rust 通过所有权(ownership&a…...
最大公约数和最小倍数 java
在Java中,计算两个数的最大公约数(Greatest Common Divisor, GCD)和最小公倍数(Least Common Multiple, LCM)是常见的编程问题。以下是具体的实现方法和代码示例。 --- ### **1. 最大公约数 (GCD)** 最大公约数是指…...
OpenHarmony Camera开发指导(三):相机设备输入输出(ArkTS)
相机应用可通过创建相机输入流调用并控制相机设备,创建不同类型的输出流,进而实现预览、拍照、录像等基础功能。 开发步骤 在创建相机设备输入之前需要先完成相机设备管理,详细开发步骤可参考上一篇文章。 创建相机输入流 通过cameraMana…...
通过分治策略解决内存限制问题完成大型Hive表数据的去重的PySpark代码实现
在Hive集群中,有一张历史交易记录表,要从这张历史交易记录表中抽取一年的数据按某些字段进行Spark去重,由于这一年的数据超过整个集群的内存容量,需要分解成每个月的数据,分别用Spark去重,并保存为Parquet文…...
融媒体中心智能语音识别系统设计与实现
县级融媒体中心智能语音识别系统设计与实现 序言 随着融媒体时代的快速发展,新闻采编、专题节目制作对语音转写效率的要求日益提高。作为基层融媒体中心的技术工程师,我们在实际工作中常面临以下痛点: 采访录音整理耗时:传统人…...
学习笔记九——Rust所有权机制
🦀 Rust 所有权机制 📚 目录 什么是值类型和引用类型?值语义和引用语义?什么是所有权?为什么 Rust 需要它?所有权的三大原则(修正版)移动语义 vs 复制语义:变量赋值到底…...
计算机视觉算法实现——电梯禁止电瓶车进入检测:原理、实现与行业应用(主页有源码)
✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ 1. 电梯安全检测领域概述 近年来,随着电动自行车(以下简称"电瓶车"&…...
扩散模型 Diffusion Model 整体流程详解
🧠 Diffusion Model 思路、疑问和代码 文章目录 🧠 Diffusion Model 思路、疑问和代码🔄 一、核心思想:从噪声到图像📦 二、正向过程:加噪🧠 三、反向过程:学习去噪🎯 目…...
[Spark]深入解密Spark SQL源码:Catalyst框架如何优雅地解析你的SQL
本文内容组织形式 总结具体例子执行语句解析层优化层物理计划层执行层 猜你喜欢PS 总结 先写个总结,接下来会分别产出各个部分的源码解析,Spark SQL主要分为以下五个执行部分。 具体例子 接下来举个具体的例子来说明 执行语句 SELECT name, age FR…...