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

第147场双周赛:子字符串匹配模式、设计任务管理器、最长相邻绝对差递减子序列、删除所有值为某个元素后的最大子数组和

Q1、子字符串匹配模式

1、题目描述

给你一个字符串 s 和一个模式字符串 p ,其中 p 恰好 包含 一个 '*' 符号。

p 中的 '*' 符号可以被替换为零个或多个字符组成的任意字符序列。

如果 p 可以变成 s 的子字符串,那么返回 true ,否则返回 false

子字符串 指的是字符串中一段连续 非空 的字符序列。

2、解题思路

核心思路

  1. 模式 p 中的 '*' 将字符串划分为两部分:left* 左侧部分)和 right* 右侧部分)。
  2. 我们需要检查:
    • left 是否是字符串 s 的某个前缀。
    • right 是否是字符串 s 的某个后缀,且满足在 leftright 之间可以插入任意字符序列。

解题步骤

  1. 提取模式的前缀和后缀:通过 '*' 将模式划分为 leftright
  2. 前缀匹配:在字符串 s 中查找 left 的位置。
  3. 后缀匹配:在 left 之后的字符串中查找是否存在 right
  4. 整体判断:如果满足上述两部分,返回 true;否则返回 false

3、代码实现

class Solution {
public:bool hasMatch(string s, string p) {// 找到 '*' 的位置size_t starPos = p.find('*');if (starPos == string::npos) { // 如果模式中没有 '*'return false;}// 分离出模式的前缀和后缀string left = p.substr(0, starPos);   // '*' 左侧部分string right = p.substr(starPos + 1); // '*' 右侧部分// 遍历字符串 s 检查是否满足条件for (size_t i = 0; i <= s.size(); ++i) {// 检查是否匹配模式的前缀部分if (i < left.size() ||s.substr(i - left.size(), left.size()) != left) {continue;}// 如果后缀部分为空,直接匹配成功if (right.empty() || s.substr(i).find(right) != string::npos) {return true;}}// 无法匹配返回 falsereturn false;}
};

在这里插入图片描述

4、复杂度分析

时间复杂度分析

  1. 遍历字符串 sO(n),其中 n 是字符串 s 的长度。
  2. 子串匹配操作:O(m),其中 m 是模式的长度。

综合时间复杂度:O(n * m)

空间复杂度分析

只使用了常量级空间进行模式划分和子串匹配操作。

空间复杂度:O(1)


Q2、设计任务管理器

1、题目描述

一个任务管理器系统可以让用户管理他们的任务,每个任务有一个优先级。这个系统需要高效地处理添加、修改、执行和删除任务的操作。

请你设计一个 TaskManager 类:

  • TaskManager(vector<vector<int>>& tasks) 初始化任务管理器,初始化的数组格式为 [userId, taskId, priority] ,表示给 userId 添加一个优先级为 priority 的任务 taskId
  • void add(int userId, int taskId, int priority) 表示给用户 userId 添加一个优先级为 priority 的任务 taskId ,输入 保证 taskId 不在系统中。
  • void edit(int taskId, int newPriority) 更新已经存在的任务 taskId 的优先级为 newPriority 。输入 保证 taskId 存在于系统中。
  • void rmv(int taskId) 从系统中删除任务 taskId 。输入 保证 taskId 存在于系统中。
  • int execTop() 执行所有用户的任务中优先级 最高 的任务,如果有多个任务优先级相同且都为 最高 ,执行 taskId 最大的一个任务。执行完任务后,taskId 从系统中 删除 。同时请你返回这个任务所属的用户 userId 。如果不存在任何任务,返回 -1 。

注意 ,一个用户可能被安排多个任务。

2、解题思路

数据结构设计

我们需要以下两个数据结构:

  1. 任务表 tasks
    • 类型:unordered_map<int, pair<int, int>>
    • 功能:通过 taskId 快速找到任务的 userIdpriority
    • 键:taskId,值:{userId, priority}
  2. 全局任务集合 globalTasks
    • 类型:set<pair<int, int>, greater<>>
    • 功能:按优先级降序排列所有任务(若优先级相同,按 taskId 降序排列),用于快速查找最高优先级任务。
    • 元素:{priority, taskId}

3、代码实现

class TaskManager {
private:// 存储每个任务的详细信息: taskId -> {userId, priority}unordered_map<int, pair<int, int>> tasks;// 全局任务集合: {priority, taskId}, 按优先级降序排列, 优先级相同时按 taskId 降序set<pair<int, int>, greater<>> globalTasks;public:// 构造函数, 初始化任务管理器TaskManager(vector<vector<int>>& tasksInit) {for (const auto& task : tasksInit) {int userId = task[0], taskId = task[1], priority = task[2];add(userId, taskId, priority);}}// 添加任务void add(int userId, int taskId, int priority) {tasks[taskId] = {userId, priority};    // 在任务表中记录任务信息globalTasks.emplace(priority, taskId); // 添加到全局任务集合}// 修改任务优先级void edit(int taskId, int newPriority) {auto [userId, oldPriority] = tasks[taskId]; // 获取任务的用户和旧优先级globalTasks.erase({oldPriority, taskId});   // 从全局任务集合中移除旧任务tasks[taskId].second = newPriority;         // 更新任务的优先级globalTasks.emplace(newPriority, taskId);   // 添加更新后的任务到集合}// 删除任务void rmv(int taskId) {auto [userId, priority] = tasks[taskId];    // 获取任务信息globalTasks.erase({priority, taskId});      // 从全局任务集合中删除tasks.erase(taskId);                        // 从任务表中删除}// 执行最高优先级任务int execTop() {// 如果没有任务, 返回 -1if (globalTasks.empty()) {return -1;}// 获取全局任务集合中的最高优先级任务auto [priority, taskId] = *globalTasks.begin();int userId = tasks[taskId].first;           // 获取任务所属用户rmv(taskId);                                // 删除任务return userId;}
};

在这里插入图片描述

4、复杂度分析

时间复杂度

  • 添加任务O(log n)(由于 set 操作)。
  • 修改任务优先级O(log n)
  • 删除任务O(log n)
  • 执行最高优先级任务O(log n)

空间复杂度

  • O(n),存储任务表和任务集合的空间。

Q3、最长相邻绝对差递减子序列

1、题目描述

给你一个整数数组 nums

你的任务是找到 nums 中的 最长子序列 seq ,这个子序列中相邻元素的 绝对差 构成一个 非递增 整数序列。换句话说,nums 中的序列 seq0, seq1, seq2, …, seqm 满足 |seq1 - seq0| >= |seq2 - seq1| >= ... >= |seqm - seqm - 1|

请你返回这个子序列的长度。

一个 子序列 指的是从一个数组中删除零个或多个元素后,剩下元素不改变顺序得到的 非空 数组。

2、解题思路

我们使用动态规划(Dynamic Programming, DP)来解决此问题。

定义动态规划状态

  1. 状态定义
    • dpLeft[i][j] 表示以 nums[i] 为最后一个元素,倒数第二个元素不大于 j 的最长子序列长度。
    • dpRight[i][j] 表示以 nums[i] 为最后一个元素,倒数第二个元素不小于 j 的最长子序列长度。
  2. 初始状态
    • 当序列中只有一个元素时,任何合法的 j 都可以使得子序列长度为 1
  3. 转移方程
    • 当前元素为 nums[i],倒数第二个元素为 j
      • dpLeft[nums[i]][j] = max(dpLeft[j][lowerBound], dpRight[j][upperBound]) + 1,其中:
        • lowerBound 是满足 abs(nums[i] - j) 范围内的最小值。
        • upperBound 是满足 abs(nums[i] - j) 范围内的最大值。
    • 类似地更新 dpRight
  4. 优化
    • 利用前缀和后缀最大值数组快速计算 lowerBoundupperBound,避免暴力遍历。

3、代码实现

class Solution {
public:int longestSubsequence(vector<int>& nums) {int n = nums.size(); // 数组长度int maxValue = 0;    // 数组中元素的最大值for (int num : nums) {maxValue = max(maxValue, num);}const int INF = 1e9;// dpLeft[i][j]: 子序列最后一个元素为 i, 倒数第二个元素不大于 j 的最长长度 // dpRight[i][j]: 子序列最后一个元素为 i, 倒数第二个元素不小于 j 的最长长度// 注意到第二维的取值范围是 0 ~ m + 1, 这是为了处理序列里只有一个元素的情况。我们认为 0 表示负无穷, m + 1 表示正无穷。vector<vector<int>> dpLeft(maxValue + 2, vector<int>(maxValue + 2, -INF));vector<vector<int>> dpRight(maxValue + 2, vector<int>(maxValue + 2, -INF));// 初始化第一个元素for (int j = 0; j <= maxValue + 1; ++j) {dpLeft[nums[0]][j] = 1;dpRight[nums[0]][j] = 1;}// 遍历数组, 逐步更新动态规划数组for (int i = 1; i < n; ++i) {vector<int> prefixMax(maxValue + 2, 1); // 前缀最大值vector<int> suffixMax(maxValue + 2, 1); // 后缀最大值// 计算当前元素可能的最长子序列for (int j = 1; j <= maxValue; ++j) {int diff = abs(nums[i] - j); // 计算绝对差int lowerBound = max(0, j - diff);int upperBound = min(maxValue + 1, j + diff);// 利用前后缀数组更新当前值prefixMax[j] = suffixMax[j] = max(dpLeft[j][lowerBound], dpRight[j][upperBound]) + 1;}// 更新前缀和后缀的最大值for (int j = 1; j <= maxValue + 1; ++j) {prefixMax[j] = max(prefixMax[j], prefixMax[j - 1]);}for (int j = maxValue; j >= 0; --j) {suffixMax[j] = max(suffixMax[j], suffixMax[j + 1]);}// 将结果更新到动态规划表for (int j = 0; j <= maxValue + 1; ++j) {dpLeft[nums[i]][j] = max(dpLeft[nums[i]][j], prefixMax[j]);dpRight[nums[i]][j] = max(dpRight[nums[i]][j], suffixMax[j]);}}// 找到最长子序列的长度int result = 0;for (int i = 1; i <= maxValue; ++i) {result = max(result, dpLeft[i][maxValue + 1]);}return result;}
};

在这里插入图片描述

4、复杂度分析

时间复杂度

  • 外层循环遍历数组:O(n)
  • 内层动态规划更新:处理前缀和后缀数组的复杂度为 O(maxValue)
  • 总复杂度为 O(n * maxValue)

空间复杂度

  • 动态规划数组 dpLeftdpRight 占用 O(maxValue^2) 空间。

Q4、删除所有值为某个元素后的最大子数组和

1、题目描述

给你一个整数数组 nums

你可以对数组执行以下操作 至多 一次:

  • 选择 nums 中存在的 任意 整数 X ,确保删除所有值为 X 的元素后剩下数组 非空
  • 将数组中 所有 值为 X 的元素都删除。

请你返回 所有 可能得到的数组中 最大 子数组和为多少。

子数组 指的是一个数组中一段连续 非空 的元素序列。

2、解题思路

核心思想

使用线段树来高效维护区间的最大子数组和,并动态模拟删除某个值 X 的影响:

  1. 初始化线段树,计算原数组的最大子数组和。
  2. 遍历数组的所有值 X,对于每个值:
    • 暂时将数组中所有等于 X 的元素变为 0,并更新线段树。
    • 计算修改后的最大子数组和。
    • 恢复原数组,并更新线段树。
  3. 返回所有可能情况下的最大子数组和。

数据结构

  1. 线段树节点结构:
    • sum:区间总和。
    • leftMax:从左侧开始的最大子段和。
    • rightMax:从右侧开始的最大子段和。
    • maxSum:区间内的最大子数组和。
  2. 辅助哈希表: 用于记录每个值在数组中的所有索引,方便快速定位需要更新的元素。

3、代码实现

class Solution {
public:long long maxSubarraySum(vector<int>& nums) {int n = nums.size();// 特殊情况处理: 如果数组中所有元素都 <= 0, 只能选择最大的负数int maxElement = *max_element(nums.begin(), nums.end());if (maxElement <= 0) {return maxElement;}// 线段树节点结构struct SegmentTreeNode {long long sum;      // 区间总和long long leftMax;  // 左侧子段最大和long long rightMax; // 右侧子段最大和long long maxSum;   // 区间内的最大子数组和};// 初始化线段树数组vector<SegmentTreeNode> segmentTree(n * 4);// 合并两个区间的函数auto mergeNodes = [&](const SegmentTreeNode& left, const SegmentTreeNode& right) -> SegmentTreeNode {return {left.sum + right.sum, // 总和为左右区间的总和之和max(left.leftMax, left.sum + right.leftMax), // 左侧子段最大和max(right.rightMax, right.sum + left.rightMax), // 右侧子段最大和max({left.maxSum, right.maxSum, left.rightMax + right.leftMax}) // 最大子数组和};};// 根据单个值创建节点auto createNode = [&](int value) -> SegmentTreeNode {return {value, value, value, value};};// 建立线段树auto buildTree = [&](auto&& self, int node, int start, int end) -> void {if (start == end) {// 叶子节点segmentTree[node] = createNode(nums[start]);} else {int mid = (start + end) / 2;int leftChild = node * 2, rightChild = node * 2 + 1;// 递归建立左右子树self(self, leftChild, start, mid);self(self, rightChild, mid + 1, end);// 合并左右子树信息segmentTree[node] = mergeNodes(segmentTree[leftChild], segmentTree[rightChild]);}};// 更新线段树auto updateTree = [&](auto&& self, int node, int start, int end, int idx, int value) -> void {if (start == end) {// 更新叶子节点segmentTree[node] = createNode(value);} else {int mid = (start + end) / 2;int leftChild = node * 2, rightChild = node * 2 + 1;if (idx <= mid) {self(self, leftChild, start, mid, idx, value);} else {self(self, rightChild, mid + 1, end, idx, value);}// 合并左右子树信息segmentTree[node] = mergeNodes(segmentTree[leftChild], segmentTree[rightChild]);}};// 初始化线段树buildTree(buildTree, 1, 0, n - 1);// 初始情况下的最大子数组和long long result = segmentTree[1].maxSum;// 映射值到索引,用于快速找到需要删除的元素位置unordered_map<int, vector<int>> valueToIndices;for (int i = 0; i < n; ++i) {valueToIndices[nums[i]].push_back(i);}// 遍历所有可能删除的值for (const auto& entry : valueToIndices) {const vector<int>& indices = entry.second;int value = entry.first;// 如果数组中只有此一个值,跳过if (indices.size() == n) {continue;}// 将所有等于该值的元素暂时设置为 0for (int index : indices) {updateTree(updateTree, 1, 0, n - 1, index, 0);}// 更新最大子数组和result = max(result, segmentTree[1].maxSum);// 恢复原值for (int index : indices) {updateTree(updateTree, 1, 0, n - 1, index, value);}}return result;}
};

在这里插入图片描述

4、复杂度分析

时间复杂度

  • 初始化线段树:O(n)。
  • 遍历数组元素进行更新:每次更新 O(log⁡n),最多更新 n 次,因此复杂度为 O(nlog⁡n)。
  • 总复杂度:O(nlog⁡n)。

空间复杂度

  • 线段树占用 O(n) 空间。
  • 哈希表存储索引,额外占用 O(n)) 空间。
  • 总空间复杂度:O(n)。


相关文章:

第147场双周赛:子字符串匹配模式、设计任务管理器、最长相邻绝对差递减子序列、删除所有值为某个元素后的最大子数组和

Q1、子字符串匹配模式 1、题目描述 给你一个字符串 s 和一个模式字符串 p &#xff0c;其中 p 恰好 包含 一个 * 符号。 p 中的 * 符号可以被替换为零个或多个字符组成的任意字符序列。 如果 p 可以变成 s 的子字符串&#xff0c;那么返回 true &#xff0c;否则返回 false…...

数据结构C语言描述9(图文结合)--二叉树和特殊书的概念,二叉树“最傻瓜式创建”与前中后序的“递归”与“非递归遍历”

前言 这个专栏将会用纯C实现常用的数据结构和简单的算法&#xff1b;有C基础即可跟着学习&#xff0c;代码均可运行&#xff1b;准备考研的也可跟着写&#xff0c;个人感觉&#xff0c;如果时间充裕&#xff0c;手写一遍比看书、刷题管用很多&#xff0c;这也是本人采用纯C语言…...

开源存储详解-分布式存储与ceph

ceph体系结构 rados&#xff1a;reliable, autonomous, distributed object storage, rados rados采用c开发 对象存储 ceph严格意义讲只提供对象存储能力&#xff0c;ceph的块存储能力实际是基于对象存储库librados的rbd 对象存储特点 对象存储采用put/get/delete&#xf…...

Vue 快速入门:开启前端新征程

在当今的 Web 开发领域&#xff0c;Vue.js 作为一款极具人气的 JavaScript 前端框架&#xff0c;正被广泛应用于各类项目之中。它以简洁的语法、高效的数据绑定机制以及强大的组件化开发模式&#xff0c;为开发者们带来了前所未有的开发体验。如果你渴望踏入前端开发的精彩世界…...

GPT系统重大升级,开创国内先河:o1支持图片识别功能正式上线

文章目录 零、前言一、授权码登录体验优化&#xff1a;一步直达聊天界面二、全新“项目”功能&#xff1a;让工作更有条理三、语音功能升级&#xff1a;全新交互体验四、o1支持图片识别五、总结 零、前言 我是虚竹哥&#xff0c;目标是带十万人玩转ChatGPT。 亲爱的用户&…...

常用的数据结构API概览

List ArrayList 1、在初始化一个ArrayList的时候&#xff0c;如果我想同时set一些值 比如存放int[ ] List<int[]> list new ArrayList(Arrays.asList(new int[]{intervals[0][0],intervals[0][1]}));//或者int[] temp new int[]{intervals[0][0],intervals[0][1]}…...

《探秘计算机视觉与深度学习:开启智能视觉新时代》

《探秘计算机视觉与深度学习&#xff1a;开启智能视觉新时代》 一、追溯起源&#xff1a;从萌芽到崭露头角二、核心技术&#xff1a;解锁智能视觉的密码&#xff08;一&#xff09;卷积神经网络&#xff08;CNN&#xff09;&#xff1a;图像识别的利器&#xff08;二&#xff0…...

Linux:操作系统不朽的传说

操作系统是计算机的灵魂&#xff0c;它掌控着计算机的硬件和软件资源&#xff0c;为用户和应用程序提供了一个稳定、高效、安全的运行环境。 在众多操作系统中&#xff0c;Linux 的地位举足轻重。它被广泛应用于服务器、云计算、物联网、嵌入式设备等领域。Linux 的成功离不开…...

Excel重新踩坑5:二级下拉列表制作;★数据透视表;

0、在excel中函数公式不仅可以写在单元格里面&#xff0c;还可以写在公式里面。 1、二级下拉列表制作&#xff1a; 2、数据透视表&#xff1a; 概念&#xff1a;通过拖拉就能实现复杂函数才能实现的数据统计问题。 概览&#xff1a;在插入选项中有个数据透视表&#xff0c;数…...

containerd配置镜像加速(含新旧版本)

文章目录 镜像加速使用文档containerd配置说明文档host.toml配置步骤&#xff08;containerd2.x新版功能&#xff0c;与config.toml解耦&#xff0c;无需重启containerd&#xff09;传统配置&#xff08;需要重启containerd&#xff09; 镜像加速使用文档 关于镜像加速的使用可…...

国产编辑器EverEdit - 常用资源汇总

1 国产编辑器EverEdit-常用资源汇总 EverEdit是一款国产文本编辑器&#xff0c;历经超过15年的更新和维护&#xff0c;拥有不输业界顶级商业文本编辑器(EmEditor、UltraEdit)的实力&#xff0c;甚至在某些方面的功能更强(当然&#xff0c;各有千秋)&#xff0c;开发者对文本编辑…...

应急指挥系统总体架构方案

引言 应急指挥系统总体架构方案旨在构建一个高效、智能的应急管理体系&#xff0c;以应对自然灾害、事故灾难等突发事件&#xff0c;保障人民生命财产安全。 背景与挑战 近年来&#xff0c;安全生产形势严峻&#xff0c;自然灾害事故频发&#xff0c;对应急指挥系统的要求越…...

Edge Scdn的应用场景有哪些?

酷盾安全Edge Scdn 具备强大的安全防护能力&#xff0c;通过多层防御机制&#xff0c;如防火墙、DDoS 攻击防护、入侵检测和防御、数据加密等&#xff0c;有效抵御各种网络攻击&#xff0c;包括 DDoS 攻击、CC 攻击、SQL 注入攻击、XSS 跨站脚本攻击等&#xff0c;保障网站和应…...

LeetCode:98.验证二叉搜索树

跟着carl学算法&#xff0c;本系列博客仅做个人记录&#xff0c;建议大家都去看carl本人的博客&#xff0c;写的真的很好的&#xff01; 代码随想录 LeetCode&#xff1a;98.验证二叉搜索树 给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 …...

mysql报错2059

客户端连接mysql服务时提示2059错误&#xff0c;通常与身份验证插件有关&#xff0c;具体表现为客户端无法加载指定的身份验证插件。这个错误在MySQL 8.0及更高版本中较为常见&#xff0c;因为从MySQL 8.0开始&#xff0c;默认的加密规则从mysql_native_password变为了caching_…...

2025/1/4期末复习 密码学 按老师指点大纲复习

我们都要坚信&#xff0c;道路越是曲折&#xff0c;前途越是光明。 --------------------------------------------------------------------------------------------------------------------------------- 现代密码学 第五版 杨波 第一章 引言 1.1三大主动攻击 1.中断…...

【数据仓库金典面试题】—— 包含详细解答

大家好&#xff0c;我是摇光~&#xff0c;用大白话讲解所有你难懂的知识点 该篇面试题主要针对面试涉及到数据仓库的数据岗位。 以下都是经典的关于数据仓库的问题&#xff0c;希望对大家面试有用~ 1、什么是数据仓库&#xff1f;它与传统数据库有何区别&#xff1f; 数据仓库…...

deepFM模型pytorch实现

deepFM deepfm包含两个部分&#xff1a;因子分解机FM和神经网络DNN&#xff0c;分别负责低阶特征和高阶特征的提取。可以处理全是分类特征的数据&#xff0c;或者分类与数值型结合的数据。 FM部分是对一阶特征和二阶特征&#xff08;一阶特征之间的交互&#xff09;的处理。 …...

【Linux】传输层协议UDP

目录 再谈端口号 端口号范围划分 UDP协议 UDP协议端格式 UDP的特点 UDP的缓冲区 UDP注意事项 进一步深刻理解 再谈端口号 在上图中&#xff0c;有两个客户端A和B&#xff0c;客户端A打开了两个浏览器&#xff0c;这两个客户端都访问同一个服务器&#xff0c;都访问服务…...

MOE怎样划分不同专家:K-Means聚类算法来实现将神经元特征聚类划分

MOE怎样划分不同专家:K-Means聚类算法来实现将神经元特征聚类划分 目录 MOE怎样划分不同专家:K-Means聚类算法来实现将神经元特征聚类划分MOE划分不同专家的方法K-Means聚类算法来实现将神经元特征聚类划分成不同专家(行或者列聚类)举例说明怎么聚类,最后神经网络怎么保存M…...

Redis两种主要的持久化方式是什么?

Redis支持两种主要的持久化方式&#xff0c;它们分别是RDB&#xff08;Redis Database Snapshotting&#xff09;和AOF&#xff08;Append Only File&#xff09;。以下是这两种持久化方式的详细介绍&#xff1a; 一、RDB&#xff08;Redis Database Snapshotting&#xff09; …...

【生活】冬天如何选口罩(医用口罩,N95, KN95还是KP95?带不带呼吸阀门?带不带活性炭?)

&#x1f4a1;总结一下就是&#xff1a; 日常防护的话&#xff0c;医用口罩就可以啦。要是想长时间佩戴N95&#xff08;KN95&#xff09;口罩的话也可以. 在高风险环境&#xff08;像医院、疫情防控期间&#xff09;&#xff0c;一定要选不带呼吸阀门的N95口罩KN95&#xff09…...

机器学习基础-卷积的计算

1 掌握卷积计算的基本过程 1.1 单通道单卷积核 如图3所示&#xff0c;现在有一张形状为[5,5,1]的灰度图&#xff0c;我们需要用图3右边的卷积核对其进行卷积处理&#xff0c;同时再考虑到偏置的作用。计算过程如下&#xff1a; 1.2 单通道多卷积核 如下图所示&#xff0c;左…...

使用LINUX的dd命令制作自己的img镜像

为了避免重复安装同一镜像&#xff0c;配置环境&#xff0c;首先我准备一个正常使用的完整系统。 使用Gparted软件先将母盘&#xff08;如U盘&#xff0c;TF卡&#xff09;分区调整为只有数据的大小。如&#xff1a;60G的TF卡&#xff0c;只用了3.5G&#xff0c;将未使用的空间…...

pdf预览兼容问题- chrome浏览器105及一下预览不了

使用的"tato30/vue-pdf": "^1.11.2"预览插件&#xff0c;发现chrome浏览器105及一下预览不了 pdfPreview预览组件&#xff1a; <template><div id"vue_pdf_view"><div class"tool_tip"><template v-if"pa…...

SpringBoot中实现拦截器和过滤器

【SpringBoot中实现过滤器和拦截器】 1.过滤器和拦截器简述 过滤器Filter和拦截器Interceptor&#xff0c;在功能方面很类似&#xff0c;但在具体实现方面差距还是比较大的。 2.过滤器的配置 2.1 自定义过滤器&#xff0c;实现Filter接口(SpringBoot 3.0 开始&#xff0c;jak…...

基于深度学习的视觉检测小项目(六) 项目的信号和变量的规划

• 关于前后端分离 当前流行的一种常见的前后端分离模式是vueflask&#xff0c;vueflask模式的前端和后端之间进行数据的传递通常是借助 API&#xff08;应用程序编程接口&#xff09;来完成的。vue通过调用后端提供的 API 来获取或提交数据。例如&#xff0c;前端可能通过发送…...

GitHub的简单操作

引言 今天开始就要开始做项目了&#xff0c;上午是要把git搭好。搭的过程中遇到好多好多的问题。下面就说一下git的简单操作流程。我们是使用的GitHub,下面也就以这个为例了 一、GitHub账号的登录注册 https://github.com/ 通过这个网址可以来到GitHub首页 点击中间绿色的S…...

LLM大语言模型自动化测试(ROUGE和RAGAS)及优化方案

1. 模型自动化测试 模型的测试中&#xff0c;不同类型的任务评测指标有显著差异&#xff0c;比如&#xff1a; 分类任务&#xff1a; 准确率&#xff08;Accuracy&#xff09;&#xff1a;正确预测的比例。 精确度&#xff08;Precision&#xff09;、召回率&#xff08;Recal…...

你已经分清JAVA中JVM、JDK与JRE的作用和关系了吗?

你已经分清JAVA中JVM、JDK与JRE的作用和关系了吗&#xff1f; 一. JVM、JDK与JRE的关系二. JVM、JDK与JRE的作用2.1 什么是JVM&#xff1f;2.2 什么是JDK&#xff1f;2.3 什么是JRE&#xff1f; 前言 点个免费的赞和关注&#xff0c;有错误的地方请指出&#xff0c;看个人主页有…...

实际开发中,常见pdf|word|excel等文件的预览和下载

实际开发中,常见pdf|word|excel等文件的预览和下载 背景相关类型数据之间的转换1、File转Blob2、File转ArrayBuffer3、Blob转ArrayBuffer4、Blob转File5、ArrayBuffer转Blob6、ArrayBuffer转File 根据Blob/File类型生成可预览的Base64地址基于Blob类型的各种文件的下载各种类型…...

Elasticsearch:Lucene 2024 年回顾

作者&#xff1a;来自 Elastic Chris Hegarty 2024 年对于 Apache Lucene 来说又是重要的一年。在本篇博文中&#xff0c;我们将探讨主要亮点。 Apache Lucene 在 2024 年表现出色&#xff0c;发布了许多版本&#xff0c;包括三年来的首次重大更新&#xff0c;其中包含令人兴奋…...

springboot实战纪实-课程介绍

教程介绍 Spring Boot是由Pivotal团队提供的一套开源框架&#xff0c;可以简化spring应用的创建及部署。它提供了丰富的Spring模块化支持&#xff0c;可以帮助开发者更轻松快捷地构建出企业级应用。 Spring Boot通过自动配置功能&#xff0c;降低了复杂性&#xff0c;同时支持…...

什么是TDD测试驱动开发(Test Driven Development)?

什么是测试驱动开发&#xff1f; 软件开发团队通常会编写自动化测试套件来防止回归。这些测试通常是在编写应用程序功能代码之后编写的。我们将采用另一种方法&#xff1a;在实现应用程序代码之前编写测试。这称为测试驱动开发 (TDD)。 为什么要应用 TDD&#xff1f;通过在实…...

学习随记:word2vec的distance程序源码注释、输入输出文件格式说明

word2vec中有5个程序&#xff0c;其中demo-word.sh中涉及两个&#xff1a;word2vec、distance。考虑到distance比较简单&#xff0c;所以我从这个入手&#xff0c;希望通过简单代码理解如何在一个高维数据空间计算距离&#xff08;查找&#xff09;。一维数据的查找&#xff0c…...

CSS 之 position 定位属性详解

CSS系列文章目录 CSS 之 display 布局属性详解 CSS 之 position 定位属性详解一文搞懂flex布局 【弹性盒布局】 文章目录 CSS系列文章目录一、前言二、静态定位&#xff1a;position:static&#xff1b;二、相对定位&#xff1a;position:relative三、绝对定位&#xff1a;pos…...

初学STM32 --- USMART

目录 USMART简介 USMART主要特点&#xff1a; USMART原理 USMART组成&#xff1a; USMART 的实现流程简单概括 USMART扫描函数&#xff1a; USMART系统命令 USMART移植 USMART简介 USMART是一个串口调试组件&#xff0c;可以大大提高代码调试效率&#xff01; USMART主…...

MySQL叶子节点为啥使用双向链表?不使用单向呢?

文章内容收录到个人网站&#xff0c;方便阅读&#xff1a;http://hardyfish.top/ 文章内容收录到个人网站&#xff0c;方便阅读&#xff1a;http://hardyfish.top/ 文章内容收录到个人网站&#xff0c;方便阅读&#xff1a;http://hardyfish.top/ MySQL 中的 B 树索引&#x…...

4_TypeScript 条件语句 --[深入浅出 TypeScript 测试]

在 TypeScript 中&#xff0c;条件语句用于根据不同的条件执行不同的代码块。这些语句包括 if 语句、else if 语句、else 语句和 switch 语句。通过使用条件语句&#xff0c;你可以编写出能够根据特定逻辑分支的代码&#xff0c;从而实现更加动态和灵活的功能。 1. if 语句 i…...

vue elementUI Plus实现拖拽流程图,不引入插件,纯手写实现。

vue elementUI Plus实现拖拽流程图&#xff0c;不引入插件&#xff0c;纯手写实现。 1.设计思路&#xff1a;2.设计细节3.详细代码实现 1.设计思路&#xff1a; 左侧button列表是要拖拽的组件。中间是拖拽后的流程图。右侧是拖拽后的数据列表。 我们拖动左侧组件放入中间的流…...

图漾相机基础操作

1.客户端概述 1.1 简介 PercipioViewer是图漾基于Percipio Camport SDK开发的一款看图软件&#xff0c;可实时预览相机输出的深度图、彩色图、IR红外图和点云图,并保存对应数据&#xff0c;还支持查看设备基础信息&#xff0c;在线修改gain、曝光等各种调节相机成像的参数功能…...

【阅读笔记】基于FPGA的红外图像二阶牛顿插值算法的实现

图像缩放技术在图像显示、传输、分析等多个领域中扮演着重要角色。随着数字图像处理技术的发展&#xff0c;对图像缩放质量的要求也越来越高。二阶牛顿插值因其在处理图像时能够较好地保持边缘特征和减少细节模糊&#xff0c;成为了图像缩放中的一个研究热点。 一、 二阶牛顿插…...

K210识别技术简介与基础使用方法

目录 一、K210芯片概述 二、K210的硬件配置与开发环境 1. 硬件配置 2. 开发环境 三、K210的识别技术基础 1. 图像识别 2. 语音识别 四、K210识别技术的基础使用方法 1. 图像识别基础使用 2. 语音识别基础使用 五、K210识别技术的应用场景 六、总结与展望 一、K210芯…...

【Android学习】Adapter中使用Context

参考文章 文章目录 1. 通过 Adapter 构造函数传入 Context2. 通过 Parent.context 获取3. 通过 onAttachedToRecyclerView() 方法获取4. 通过 ImageView 获取 context (局限于本例子中)5. 四种方法对比分析6. 作者推荐的方法 需求&#xff1a; Glide加载图片需要用到Context 1…...

LLM大模型RAG内容安全合规检查

1.了解内容安全合规涉及的范围 我们先回顾一下智能答疑机器人的问答流程。问答流程主要包括用户、智能答疑机器人、知识库、大语言模型这四个主体。 涉及内容安全的关键阶段主要有&#xff1a; 输入阶段&#xff1a;用户发起提问。 输出阶段&#xff1a;机器人返回回答。 知识…...

Flink operator实现自动扩缩容

官网文档位置&#xff1a; 1.Autoscaler | Apache Flink Kubernetes Operator 2.Configuration | Apache Flink Kubernetes Operator 1.部署K8S集群 可参照我之前的文章k8s集群搭建 2.Helm安装Flink-Operator helm repo add flink-operator-repo https://downloads.apach…...

数据挖掘——集成学习

数据挖掘——集成学习 集成学习Bagging&#xff1a;有放回采样随机森林 BoostingStacking 集成学习 集成学习&#xff08;Ensemble learning&#xff09;方法通过组合多种学习算法来获得比单独使用任何一种算法更好的预测性能。 动机是为了提高但分类器的性能 Bagging&…...

XGBoost 简介:高效机器学习算法的实用指南

1. 什么是 XGBoost&#xff1f; XGBoost&#xff0c;全称 eXtreme Gradient Boosting&#xff0c;是一种基于 梯度提升决策树&#xff08;GBDT&#xff09; 的高效实现。相比传统的 GBDT&#xff0c;XGBoost 在速度、内存利用和并行化等方面做了很多优化&#xff0c;因此在大规…...

【NLP高频面题 - Transformer篇】什么是缩放点积注意力,为什么要除以根号d?

什么是缩放点积注意力&#xff0c;为什么要除以根号d&#xff1f; 重要性&#xff1a;★★★ Transformer 自注意力机制也被称为缩放点积注意力机制&#xff0c;这是因为其计算过程是先求查询矩阵与键矩阵的点积&#xff0c;再用 d k \sqrt{d_k} dk​ ​ 对结果进行缩放。这…...

HTML——56.表单发送

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>表单发送</title></head><body><!--注意&#xff1a;1.表单接收程序&#xff0c;放在服务器环境中(也就是这里的www文件目录中)2.表单发送地址&#x…...