hot100-子串-JS
一、560.和为k的子串
560. 和为 K 的子数组
提示
给你一个整数数组
nums
和一个整数k
,请你统计并返回 该数组中和为k
的子数组的个数 。子数组是数组中元素的连续非空序列。
示例 1:
输入:nums = [1,1,1], k = 2 输出:2示例 2:
输入:nums = [1,2,3], k = 3 输出:2提示:
1 <= nums.length <= 2 * 104
-1000 <= nums[i] <= 1000
-107 <= k <= 107
1.暴力枚举法
暴力枚举的基本思路是通过两层循环来枚举所有可能的子数组,然后计算每个子数组的和,判断其是否等于目标值 k
,如果相等则将计数器加 1。
/*** @param {number[]} nums* @param {number} k* @return {number}*/
var subarraySum = function (nums, k) {let count = 0;for (let i = 0; i < nums.length; i++) {let sum = 0;for (let j = i; j < nums.length; j++) {sum += nums[j];if (sum === k) {count++}}}return count;
};
2.使用前缀和与哈希表(推荐)
问题分析
给定一个整数数组 nums
和一个整数 k
,要找出数组中和为 k
的子数组(连续非空元素序列)的个数。例如,对于数组 [1, 1, 1]
和 k = 2
,子数组 [1, 1]
满足和为 2
,所以结果是 2
。
前缀和的引入
前缀和是指从数组开头到当前位置的所有元素的和。假设我们有一个数组 nums = [a0, a1, a2, ..., an]
,那么:
- 前缀和
prefixSum[0] = a0
; - 前缀和
prefixSum[1] = a0 + a1
; - 前缀和
prefixSum[2] = a0 + a1 + a2
; - 以此类推,
prefixSum[i] = a0 + a1 + ... + ai
。
对于计算子数组和,有一个重要的性质:如果我们要找从索引 j
到索引 i
(j <= i
)的子数组和,那么这个子数组和 subarraySum(j, i)
就等于 prefixSum[i] - prefixSum[j - 1]
(当 j > 0
时),如果 j = 0
,则 subarraySum(j, i) = prefixSum[i]
。
算法思路推导
我们的目标是找到满足 subarraySum(j, i) = k
的子数组个数。根据上面的前缀和性质,subarraySum(j, i) = prefixSum[i] - prefixSum[j - 1] = k
,可以变形为 prefixSum[j - 1] = prefixSum[i] - k
。
这意味着,如果我们知道所有前缀和的值以及它们出现的次数,那么对于当前计算得到的前缀和 prefixSum[i]
,我们只需要检查之前是否出现过 prefixSum[i] - k
这个前缀和。如果出现过,那么就说明存在一个子数组的和为 k
,并且出现次数就是 prefixSum[i] - k
出现的次数。
哈希表的作用
为了高效地存储和查询前缀和及其出现的次数,我们使用哈希表(在 JavaScript 中是 Map
对象)。具体步骤如下:
-
初始化:
- 创建一个空的
Map
对象map
,用于存储前缀和及其出现的次数。 - 初始化
map.set(0, 1)
,这是因为前缀和为0
的情况是存在的(对应空数组,空数组的和为0
),出现次数为1
。 - 初始化变量
sum = 0
来记录当前的前缀和,ans = 0
来记录和为k
的子数组的个数。
- 创建一个空的
-
遍历数组:
- 对于数组中的每个元素
num
,将其加到当前前缀和sum
中,即sum += num
。 - 检查
map
中是否存在sum - k
。如果存在,说明存在一个子数组的和为k
,将map.get(sum - k)
的值加到ans
中。这是因为sum - (sum - k) = k
,map.get(sum - k)
表示之前出现过sum - k
这个前缀和的次数,也就意味着有这么多组子数组的和为k
。 - 将当前前缀和
sum
及其出现的次数存入map
中。如果sum
已经存在于map
中,将其出现次数加1
;否则,将其出现次数设为1
。
- 对于数组中的每个元素
-
返回结果:
- 遍历结束后,
ans
中存储的就是和为k
的子数组的个数,将其返回。
- 遍历结束后,
示例分析
以输入 nums = [1, 1, 1]
,k = 2
为例:
- 初始化:
map = {0: 1}
,sum = 0
,ans = 0
。 - 第一次循环:
num = 1
,sum = 0 + 1 = 1
。- 检查
map
中是否有1 - 2 = -1
,没有。 map.set(1, 1)
(现在map = {0: 1, 1: 1}
)。ans
不变,仍为0
。
- 第二次循环:
num = 1
,sum = 1 + 1 = 2
。- 检查
map
中是否有2 - 2 = 0
,有,ans = ans + map.get(0) = 0 + 1 = 1
。 map.set(2, 1)
(现在map = {0: 1, 1: 1, 2: 1}
)。
- 第三次循环:
num = 1
,sum = 2 + 1 = 3
。- 检查
map
中是否有3 - 2 = 1
,有,ans = ans + map.get(1) = 1 + 1 = 2
。 map.set(3, 1)
(现在map = {0: 1, 1: 1, 2: 1, 3: 1}
)。
- 最终返回
ans = 2
,符合预期。
通过这样的方式,使用前缀和与哈希表的方法能够高效地解决“和为 K 的子数组”问题。希望以上解释能帮助你理解这个算法的原理和实现过程。
代码实现
/*** @param {number[]} nums* @param {number} k* @return {number}*/
var subarraySum = function (nums, k) {let map=new Map();// 初始设置为0的元素有1个map.set(0,1);let sum=0;let ans=0;for(let num of nums){// 计算元素的前缀和sum+=num;// 计数,统计前缀和为某个数共有多少个map.set(sum,(map.has(sum)||0)+1)// 判断map中是否有 sum-k 如果存在,说明存在一个子数组的和为 kif(map.has(sum-k)){// 将 map.get(sum - k)的值加到 ans 中ans+=map.get(sum-k);}}return ans;
};
二、239.滑动窗口最大值
239. 滑动窗口最大值
给你一个整数数组
nums
,有一个大小为k
的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的k
个数字。滑动窗口每次只向右移动一位。返回 滑动窗口中的最大值 。
示例 1:
输入:nums = [1,3,-1,-3,5,3,6,7], k = 3 输出:[3,3,5,5,6,7] 解释: 滑动窗口的位置 最大值 --------------- ----- [1 3 -1] -3 5 3 6 7 31 [3 -1 -3] 5 3 6 7 31 3 [-1 -3 5] 3 6 7 51 3 -1 [-3 5 3] 6 7 51 3 -1 -3 [5 3 6] 7 61 3 -1 -3 5 [3 6 7] 7示例 2:
输入:nums = [1], k = 1 输出:[1]提示:
1 <= nums.length <= 105
-104 <= nums[i] <= 104
1 <= k <= nums.length
1.暴力法(超出时间限制)
O(nk)会很慢
/*** @param {number[]} nums* @param {number} k* @return {number[]}*/
function maxSlidingWindow(nums, k) {let result=[]for (let i = 0; i < nums.length - k + 1; i++) {let max = -Infinity;for (let j = i; j < i + k; j++) {max = Math.max(nums[j], max)}result.push(max)}return result
}
2.优化解法(双端队列,时间复杂度 O(n))
算法思路
-
初始化数据结构:
q
数组模拟单调栈,它的作用是存储数组nums
中元素的下标,并且保证栈内元素对应的nums
值从栈底到栈顶是单调递减的。这样,栈顶元素对应的nums
值始终是当前窗口内的最大值(或者候选最大值)。ans
数组用于存储每个滑动窗口的最大值,最终作为函数的返回结果。
-
遍历数组过程:
- 维护单调性:在每次将新元素
nums[i]
考虑加入窗口时,通过while
循环检查栈顶元素。如果当前元素nums[i]
大于等于栈顶元素对应的nums
值,就不断弹出栈顶元素。这是因为栈顶元素不可能是当前窗口内的最大值了,通过这样的操作保证了栈的单调性。 - 加入新元素:将当前元素的下标
i
压入栈q
中,以便后续判断该元素是否在窗口内以及作为可能的最大值候选。 - 检查窗口范围:检查栈顶元素的下标是否已经不在当前窗口范围内(即小于等于
i - k
)。如果是,说明该元素已经随着窗口的滑动移出了当前窗口,需要将其从栈顶弹出,以确保栈中元素对应的下标都在当前窗口内。 - 记录最大值:当窗口已经形成(即
i >= k - 1
,因为前k - 1
个元素构不成完整窗口)时,栈顶元素对应的nums
值就是当前窗口的最大值,将其加入到ans
数组中。
- 维护单调性:在每次将新元素
-
返回结果:遍历完整个数组
nums
后,ans
数组中已经存储了每个滑动窗口的最大值,将其返回。
示例演示
给定的示例 nums = [1, 3, -1, -3, 5, 3, 6, 7]
,k = 3
为例,详细演示如何计算滑动窗口最大值的:
初始化
-
初始化
q
为一个空数组,用于模拟单调栈,存储数组元素的下标;初始化ans
为一个空数组,用于存储每个滑动窗口的最大值。 -
i
初始化为0
,开始遍历数组nums
。
第一次循环 (i = 0
)
-
nums[0] = 1
,此时q
为空,将i = 0
压入q
,即q = [0]
。 -
因为
q
只有一个元素,它的下标0
满足0 >= 0 - 3
(此时窗口还未完全形成,这里条件看似不成立但后续会处理),不执行q.shift()
。 -
由于
i = 0 < 3 - 1
,窗口还未形成,不执行ans.push(nums[q[0]])
。
第二次循环 (i = 1
)
-
nums[1] = 3
,因为3 >= nums[q[q.length - 1]]
(即3 >= nums[0]
,nums[0] = 1
),执行q.pop()
,此时q = [1]
。 -
将
i = 1
压入q
,q = [1]
。 -
因为
q[0] = 1
,1 < 1 - 3
不成立,不执行q.shift()
。 -
由于
i = 1 < 3 - 1
,窗口还未形成,不执行ans.push(nums[q[0]])
。
第三次循环 (i = 2
)
-
nums[2] = -1
,因为-1 < nums[q[q.length - 1]]
(即-1 < nums[1]
,nums[1] = 3
),不执行q.pop()
。 -
将
i = 2
压入q
,q = [1, 2]
。 -
因为
q[0] = 1
,1 < 2 - 3
不成立,不执行q.shift()
。 -
由于
i = 2 >= 3 - 1
,窗口已经形成,执行ans.push(nums[q[0]])
,即ans = [3]
。
第四次循环 (i = 3
)
-
nums[3] = -3
,因为-3 < nums[q[q.length - 1]]
(即-3 < nums[2]
,nums[2] = 3
),不执行q.pop()
。 -
将
i = 3
压入q
,q = [1, 2, 3]
。 -
因为
q[0] = 1
,1 < 3 - 3
不成立,不执行q.shift()
。 -
由于
i = 3 >= 3 - 1
,窗口已经形成,执行ans.push(nums[q[0]])
,即ans = [3, 3]
。
第五次循环 (i = 4
)
-
nums[4] = 5
,因为5 >= nums[q[q.length - 1]]
(即5 >= nums[3]
,nums[3] = -3
),执行q.pop()
,此时q = [1, 2]
。 -
因为
5 >= nums[q[q.length - 1]]
(即5 >= nums[2]
,nums[2] = 3
),再执行q.pop()
,此时q = [1]
。 -
将
i = 4
压入q
,q = [1]
。 -
因为
q[0] = 1
,1 < 4 - 3
不成立,不执行q.shift()
。 -
由于
i = 4 >= 3 - 1
,窗口已经形成,执行ans.push(nums[q[0]])
,即ans = [3, 3, 5]
。
第六次循环 (i = 5
)
-
nums[5] = 3
,因为3 >= nums[q[q.length - 1]]
(即3 >= nums[1]
,nums[1] = 1
),执行q.pop()
,此时q = [5]
。 -
将
i = 5
压入q
,q = [5]
。 -
因为
q[0] = 5
,5 < 5 - 3
不成立,不执行q.shift()
。 -
由于
i = 5 >= 3 - 1
,窗口已经形成,执行ans.push(nums[q[0]])
,即ans = [3, 3, 5, 5]
。
第七次循环 (i = 6
)
-
nums[6] = 6
,因为6 >= nums[q[q.length - 1]]
(即6 >= nums[5]
,nums[5] = 3
),执行q.pop()
,此时q = [6]
。 -
将
i = 6
压入q
,q = [6]
。 -
因为
q[0] = 6
,6 < 6 - 3
不成立,不执行q.shift()
。 -
由于
i = 6 >= 3 - 1
,窗口已经形成,执行ans.push(nums[q[0]])
,即ans = [3, 3, 5, 5, 6]
。
第八次循环 (i = 7
)
-
nums[7] = 7
,因为7 >= nums[q[q.length - 1]]
(即7 >= nums[6]
,nums[6] = 6
),执行q.pop()
,此时q = [7]
。 -
将
i = 7
压入q
,q = [7]
。 -
因为
q[0] = 7
,7 < 7 - 3
不成立,不执行q.shift()
。 -
由于
i = 7 >= 3 - 1
,窗口已经形成,执行ans.push(nums[q[0]])
,即ans = [3, 3, 5, 5, 6, 7]
。
循环结束
遍历完整个数组 nums
后,ans
数组中存储了每个滑动窗口的最大值,最终返回 ans = [3, 3, 5, 5, 6, 7]
。
代码实现
var maxSlidingWindow = function(nums, k) {let q = []; // 用于模拟单调栈,存储数组元素的下标let ans = []; // 用于存储每个滑动窗口的最大值for (let i = 0; i < nums.length; i++) {// 当栈不为空,并且当前元素大于等于栈顶元素对应的nums值时while (q.length > 0 && nums[i] >= nums[q[q.length - 1]]) {q.pop(); // 弹出栈顶元素,因为它不可能是当前窗口内的最大值了}q.push(i); // 将当前元素的下标压入栈中// 如果栈顶元素的下标已经不在当前窗口范围内(即小于等于i - k)if (q[0] <= i - k) {q.shift(); // 弹出栈顶元素,因为它已经不在当前窗口内了}// 当窗口已经形成(即i >= k - 1,因为前k - 1个元素构不成完整窗口)if (i >= k - 1) {ans.push(nums[q[0]]); // 将栈顶元素对应的nums值(也就是当前窗口的最大值)加入到结果数组ans中}}return ans;
};
相关文章:
hot100-子串-JS
一、560.和为k的子串 560. 和为 K 的子数组 提示 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1: 输入:nums [1,1,1], k 2 输出:2示例 2…...
LeetCode 270:在二叉搜索树中寻找最接近的值(Swift 实战解析)
文章目录 摘要描述题解答案题解代码分析示例测试及结果时间复杂度空间复杂度总结 摘要 在日常开发中,我们经常需要在一组有序的数据中快速找到最接近某个目标值的元素。LeetCode 第 270 题“Closest Binary Search Tree Value”正是这样一个问题。本文将深入解析该…...
《操作系统真象还原》第十三章——编写硬盘驱动程序
文章目录 前言硬盘及分区表创建从盘及获取安装的磁盘数创建磁盘分区表硬盘分区表浅析 编写硬盘驱动程序硬盘初始化修改interrupt.c编写ide.h编写ide.c 实现thread_yield和idle线程修改thread.c 实现简单的休眠函数修改timer.c 完善硬盘驱动程序继续编写ide.c 获取硬盘信息&…...
DNS服务实验
该文章将介绍DNS服务的正向和反向解析实验、主从实验、转发服务器实验以及Web解析实验 正向解析实验:将域名解析为对应的IP地址 反向解析实验:将IP地址解析为对应的域名 主从实验:主服务器区域数据文件发送给从服务器,从服务器…...
SierraNet M1288网络损伤功能显著助力GPU互联网络的测试验证,包含包喷洒,LLR等复杂特性的验证测试
SierraNet M1288 以太网协议分析仪 产品概述 SierraNet M1288 是一款兼具高性价比与全面功能的以太网和光纤通道数据捕获及协议验证系统。它能够以全线路速率 100% 记录所有流量,并借助 InFusion™ 工具实现高级错误注入和流量破坏功能,为开发人员和协议…...
HunyuanCustom:文生视频框架论文速读
《HunyuanCustom: A Multimodal-Driven Architecture for Customized Video Generation》论文讲解 一、引言 本文提出了 HunyuanCustom,这是一个基于多模态驱动的定制化视频生成框架。该框架旨在解决现有视频生成模型在身份一致性(identity consistenc…...
HTTP、HTTPS、SSH区别以及如何使用ssh-keygen生成密钥对
HTTP、HTTPS、SSH区别以及如何使用ssh-keygen生成密钥对 HTTP (HyperText Transfer Protocol) 定义:应用层协议,用于通过Web传输数据(如网页、文件)默认端口:80机制:客户端发送Get请求,服务器…...
如何启动vue项目及vue语法组件化不同标签应对的作用说明
如何启动vue项目及vue语法组件化不同标签应对的作用说明 提示:帮帮志会陆续更新非常多的IT技术知识,希望分享的内容对您有用。本章分享的是node.js和vue的使用。前后每一小节的内容是存在的有:学习and理解的关联性。【帮帮志系列文章】&…...
Ubuntu22.04安装显卡驱动/卸载显卡驱动
报错 今日输入nvidia-smi报错,在安装了535和550,包括560都没办法解决,但是又怕乱搞导致环境损坏,打算把显卡卸载然后重新安装系统默认推荐版本的显卡驱动 qinqin:~$ nvidia-smi Failed to initialize NVML: Driver/library version mismatch NVML library version: 560.35卸载…...
【桌面】【输入法】常见问题汇总
目录 一、麒麟桌面系统输入法概述 1、输入法介绍 2、输入法相关组件与服务 3、输入法调试相关命令 3.1、输入法诊断命令 3.2、输入法配置重新加载命令 3.3、启动fcitx输入法 3.4、查看输入法有哪些版本,并安装指定版本 3.5、重启输入法 3.6、查看fcitx进程…...
Web3 初学者学习路线图
目录 🌟 Web3 初学者学习路线图 🧩 第一步:搞懂 Web3 是什么 ✅ 学什么? 🔧 推荐工具: 🎥 推荐学习: 🛠️ 第二步:了解智能合约和 Solidity(核心技能) ✅ 学什么? 🔧 工具: 📘 推荐课程: 🌐 第三步:连接前端和区块链,创建简单 DApp ✅ 学…...
python打卡day21
常见的降维算法 知识点回顾: LDA线性判别PCA主成分分析t-sne降维 之前学了特征降维的两个思路,特征筛选(如树模型重要性、方差筛选)和特征组合(如SVD/PCA)。 现在引入特征降维的另一种分类:无/有…...
KNOWLEDGE-BASED SYSTEMS(KBS期刊)投稿经验分享
期刊介绍: KBS是计算机一区,CCF-c期刊,(只看大类分区,小类不用看,速度很快,桌拒比较多,能送审就机会很大!) 具体时间流程: 7月初投稿…...
vue使用rules实现表单校验——校验用户名和密码
编写校验规则 常规校验 const rules {username: [{ required: true, message: 请输入用户名, trigger: blur },{ min: 5, max: 16, message: 长度在 5 到 16 个字符, trigger: blur }],password: [{ required: true, message: 请输入密码, trigger: blur },{ min: 5, max: 1…...
[CANN] 安装软件依赖
环境 昊算平台910b NPUdocker容器 安装步骤 安装依赖-安装CANN(物理机场景)-软件安装-开发文档-昇腾社区 apt安装miniconda安装 Apt 首先进行换源,参考昇腾NPU容器内 apt 换源 Miniconda 安装miniconda mkdir -p ~/miniconda3 wget …...
代码随想录算法训练营第三十七天
LeetCode题目: 300. 最长递增子序列674. 最长连续递增序列718. 最长重复子数组2918. 数组的最小相等和(每日一题) 其他: 今日总结 往期打卡 300. 最长递增子序列 跳转: 300. 最长递增子序列 学习: 代码随想录公开讲解 问题: 给你一个整数数组 nums ,找到其中最长…...
Qt开发经验 --- 避坑指南(11)
文章目录 [toc]1 QtCreator同时运行多个程序2 刚安装的Qt编译报错cannot find -lGL: No such file or directory3 ubuntu下Qt无法输入中文4 Qt版本发行说明5 Qt6.6 VS2022报cdb.exe无法定位dbghelp.dll输入点6 Qt Creator13.0对msvc-qmake-jom.exe支持有问题7 银河麒麟系统中ud…...
vue 组件函数式调用实战:以身份验证弹窗为例
通常我们在 Vue 中使用组件,是像这样在模板中写标签: <MyComponent :prop"value" event"handleEvent" />而函数式调用,则是让我们像调用一个普通 JavaScript 函数一样来使用这个组件,例如:…...
青藏高原东北部祁连山地区250m分辨率多年冻土空间分带指数图(2023)
时间分辨率:10年 < x < 100年空间分辨率:100m - 1km共享方式:开放获取数据大小:24.38 MB数据时间范围:近50年来元数据更新时间:2023-10-08 数据集摘要 多年冻土目前正在经历大规模的退化,…...
[6-2] 定时器定时中断定时器外部时钟 江协科技学习笔记(41个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 V 30 31 32 33 34 35 36 37 38 39 40 41...
抖音视频去水印怎么操作
在抖音上保存或分享视频时,水印通常会自动添加。如果想去除水印,可以尝试以下方法,但请注意尊重原创作者的版权,仅限个人合理使用。 方法 1:使用第三方去水印工具(手机/电脑均可) 复制视频链接 …...
Java并发编程
Java并发编程的核心挑战 线程安全与数据竞争 线程安全的概念及其重要性数据竞争的产生原因及常见场景如何通过同步机制(如锁、原子类)避免数据竞争 // 示例:使用synchronized关键字实现线程安全 public class Counter {private int count …...
【ospf综合实验】
拓扑图:...
NVMe控制器之仿真平台搭建
本设计采用Verilog HDL语言进行实现并编写测试激励,仿真工具使用Mentor公司的QuestaSim 10.6c软件完成对关键模块的仿真验证工作,由于是基于Xilinx公司的Kintex UltraScale系列FPGA器件实现的,因此使用Xilinx公司的Vivado2019.1设计套件工具进…...
深入探究 InnoDB 的写失效问题
在 MySQL 数据库的世界中,InnoDB 存储引擎凭借其卓越的性能和可靠性,成为众多应用的首选。然而,如同任何复杂的系统一样,InnoDB 也面临着一些挑战,其中写失效问题便是一个值得深入探讨的关键议题。本文将带您全面了解 …...
边缘计算从专家到小白
“云-边-端”架构 “云” :传统云计算的中心节点,是边缘计算的管控端。汇集所有边缘的感知数据、业务数据以及互联网数据,完成对行业以及跨行业的态势感知和分析。 “边” :云计算的边缘侧,分为基础设施边缘和设备边缘…...
智能商品推荐系统技术路线图
智能商品推荐系统技术路线图 系统架构图 --------------------------------------------------------------------------------------------------------------- | 用户交互层 (Presentation Layer) …...
SpringMVC面试内容
SpringMVC运行流程 SpringMVC的运行流程SpringBoot Vue交互流程HTTP 的 GET 和 POST 区别跨域请求是什么?有什么问题?怎么解决?浏览器访问资源没有响应,怎么排查Cookie的理解Session的理解 Cookie和Session的区别 SpringMVC的运行流程 1、域名解析…...
Python 核心概念速查清单
本文大纲 1. 变量与字符串 (Variables and Strings) 变量 (Variables): 用于存储值。字符串 (String): 由单引号或双引号包围的字符序列。 示例:打印 “Hello world!” print("Hello world!")使用变量打印: msg = "Hello world!" print(msg)字符串拼接…...
Unity.UGUI DrawCall合批笔记
前言 昨天在通过FrameDebug查看DrawCall时,发现批次结果与理解中的不一致,又去补充了一下这方面知识,笔记记录下,只关乎UGUI。 基础场景 首先列一下无法合批的一些基础场景 1.图片无图集或图集不同,图片是运行时生成的…...
高精度加减
1、高精度加法 主要有以下几步: 输入处理:使用字符串来存储大整数,避免数值范围限制。对齐数字:确保两个数字的数位对齐(前面补零)。逐位相加:从最低位开始,逐位相加并处理进位。最…...
day21python打卡
知识点回顾: LDA线性判别PCA主成分分析t-sne降维 还有一些其他的降维方式,也就是最重要的词向量的加工,我们未来再说 作业: 自由作业:探索下什么时候用到降维?降维的主要应用?或者让ai给你出题&…...
DataBinding与Kotlin优化视图绑定
在 Android 开发中,DataBinding 与 Kotlin 的结合可以显著提升代码的简洁性和可维护性,彻底摆脱传统 findViewById 的繁琐操作。以下是如何通过 DataBinding 优化视图绑定的完整指南: 一、为何要告别 findViewById? 模板代码冗余…...
CDGP主观题题库与范例解答
本文共8400字,涉及数据建模、数据安全、主数据、数据架构等主观题解答范例 数据建模题目 初次访问网购网站的访客,如试图在网站上购物,则需要申请会员。申请会员时需要填写会员姓名、性别、身份证号码、联系电话、会员ID、密码等信息。会员申请成功后,通过会员ID和密码便…...
2.商户查询缓存
2.0 问题记录 2.0.1 为什么要给缓存 TTL 1. 防止内存泄漏:如果不设置过期时间,缓存数据会永久存在于 Redis 中,随着时间推移可能导致 Redis 内存耗尽。2. 数据一致性:设置合理的过期时间可以确保缓存不会长期存储过时数据&#…...
vs python“““标记注释报错,vs使用自带环境安装 python第三方库
文章目录 vs python"""标记注释报错vs使用自带环境安装 python第三方库 vs python"""标记注释报错 解决方法: 切换编码 文件-高级保存选项-编码处选择下拉菜单中的“Unicode(UTF-8带签名)-代码页65001”-确定 这里更详细:…...
区块链技术中的Java SE实战:从企业级应用到5大核心问题解析
区块链技术中的Java SE实战:从企业级应用到5大核心问题解析 问题1:如何在Java SE中实现区块链的基本数据结构? 回答1: 区块链的核心数据结构是链式区块,每个区块包含数据、哈希值以及前一个区块的哈希值。以下是一个…...
数据结构—(概述)
目录 一 数据结构,相关概念 1. 数据结构: 2. 数据(Data): 3. 数据元素(Data Element): 4. 数据项: 5. 数据对象(Data Object): 6. 容器(container): 7. 结点(Node)ÿ…...
UE5 PCG学习笔记
https://www.bilibili.com/video/BV1onUdY2Ei3/?spm_id_from333.337.search-card.all.click&vd_source707ec8983cc32e6e065d5496a7f79ee6 一、安装PCG 插件里选择以下进行安装 移动目录后,可以使用 Update Redirector References,更新下࿰…...
Harness: 全流程 DevOps 解决方案,让持续集成如吃饭般简单
引言 在当今快速发展的软件开发世界中,高效的 DevOps 工具变得越来越重要。Harness 作为一个开源的运维平台,为开发和运维团队提供了从代码托管到 CI/CD 的全流程解决方案,同时实现自动化的开发环境和制品管理。这种集中化的工具可以显著减少运维难度,提高团队效率,真正解…...
Windows:Powershell的使用
文章目录 零、格式化输出命令1、Format-List(别名:fl) 一、服务管理SC命令二、软件管理命令三、权限管理命令1、Get-Acl2、Set-Acl 总结 零、格式化输出命令 1、Format-List(别名:fl) 可通过管道符传递对象…...
AIGC时代大模型幻觉问题深度治理:技术体系、工程实践与未来演进
文章目录 一、幻觉问题的多维度透视与产业冲击1.1 幻觉现象的本质特征与量化评估1.2 产业级影响案例分析 二、幻觉问题的根源性技术解剖2.1 数据污染的复合效应2.1.1 噪声数据类型学分析2.1.2 数据清洗技术实现 2.2 模型架构的先天缺陷2.2.1 注意力机制的局限性2.2.2 解码策略的…...
JMeter 中通过 WebSocket (WS) 协议发送和接收 Protocol Buffers (Proto) 消息
在 JMeter 中通过 WebSocket (WS) 协议发送和接收 Protocol Buffers (Proto) 消息,需要使用 JMeter WebSocket 插件,并结合 JSR223 脚本处理 Proto 的序列化和反序列化。以下是完整步骤: 1. 准备工作 1.1 安装 WebSocket 插件 下载插件&…...
PyQt5基础:QWidget类的全面解析与应用实践
在Python的GUI编程领域,PyQt5是一个强大且广泛应用的库。其中,QWidget类作为所有用户界面对象的基类,是构建丰富多样用户界面的基础。今天,我们就来深入了解QWidget类及其相关应用。 QWidget类概述 QWidget类是PyQt中所有窗口和…...
DA14585墨水屏学习
一、do_min_word void do_min_work(void) {timer_used_min app_easy_timer(APP_PERIPHERAL_CTRL_TIMER_DELAY_MINUTES, do_min_work);current_unix_time time_offset;time_offset 60;// if (isconnected 1)// {// GPIO_SetActive(GPIO_LED_PORT, GPIO_LED_PIN);// …...
AI日报 · 2025年5月10日|OpenAI“Stargate”超级数据中心项目掀起美国各州争夺战
1、OpenAI“Stargate”超级数据中心项目掀起美国各州争夺战 《华盛顿邮报》披露,OpenAI 与 Oracle、SoftBank 合作推进的“Stargate”项目(首期投资 1000 亿美元,四年内总投资 5000 亿美元)已收到超过 250 份选址提案ÿ…...
浅谈装饰模式
一、前言 hello大家好,本次打算简单聊一下装饰者模式,其实写有关设计模式的内容还是蛮有挑战性的,首先呢就是小永哥实力有限担心说不明白,其次设计模式是为了解决某些问题场景,在当前技术生态圈如此完善的情况下&#…...
《Python星球日记》 第54天:卷积神经网络进阶
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、深度CNN架构解析1. LeNet-5(1998)2. AlexNet&#x…...
R 语言科研绘图 --- 桑基图-汇总
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...
JDBC工具类
目录 引言 一、JDBC连接数据库步骤 1. 加载驱动 2. 获取连接(URL 用户名 密码) 3. 编写sql 4. 获取执行sql的stmt的对象 5. 执行sql 拿到结果集 6. 遍历结果集 7. 关闭资源(先开的后关 后开的先关) 二、JDBC工具类 版…...