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

第426场周赛:仅含置位位的最小整数、识别数组中的最大异常值、连接两棵树后最大目标节点数目 Ⅰ、连接两棵树后最大目标节点数目 Ⅱ

Q1、仅含置位位的最小整数

1、题目描述

给你一个正整数 n。

返回 大于等于 n 且二进制表示仅包含 置位 位的 最小 整数 x 。

置位 位指的是二进制表示中值为 1 的位。

2、解题思路

我们需要找到一个整数 x,使得:

  • x ≥ n
  • x 的二进制表示中仅包含置位位,并且 x 是比 n 大于或等于的最小整数。

解法

通过不断构造形如 111...111 的数并判断是否大于等于 n:

  1. 初始化一个结果变量 ret,初始值为 1(二进制为 1)。
  2. 如果当前 ret 小于 n,则将其左移一位后,最低位补 1。这相当于在二进制末尾追加一个 1,使其逐渐变成 11111 等。
  3. 当 ret 大于等于 n 时,停止循环并返回 ret。

3、代码实现

class Solution {
public:int smallestNumber(int n) {int ret = 1; // 初始结果while (ret < n) {ret = (ret << 1) | 1; // 左移一位后补 1}return ret;}
};

4、复杂度分析

  • 时间复杂度O(1)。该算法通过一系列固定次数的位操作计算最小整数,无论 n 的大小如何,位运算的次数是固定的。
  • 空间复杂度O(1)。算法只使用常数空间。

Q2、识别数组中的最大异常值

1、题目描述

给你一个整数数组 nums。该数组包含 n 个元素,其中 恰好 有 n - 2 个元素是 特殊数字 。剩下的 两个 元素中,一个是这些 特殊数字 的 和 ,另一个是 异常值 。

异常值 的定义是:既不是原始特殊数字之一,也不是表示这些数字元素和的数字。

注意,特殊数字、和 以及 异常值 的下标必须 不同 ,但可以共享 相同 的值。

返回 nums 中可能的 最大异常值。

2、解题思路

要解这个问题,我们可以按照以下步骤进行:

  1. 首先理解数组的结构
    • 数组中有 n-2 个特殊数字,这些数字的和是 sum
    • 剩下的两个数字中一个是 sum,另一个是 abnormal
    • 我们需要确定这两个数字分别是什么,并且找出最大的异常值。
  2. 步骤
    • 计算数组中所有元素的总和 totalSum
    • 对于每个元素,假设它是 abnormal,并计算其他元素的和(即 totalSum - abnormal)。
    • 检查这个和是否可以分解成一个 sumn-3 个特殊数字的和。
    • 如果可以,则返回这个 abnormal 数字。
  3. 分析
    • 我们可以通过检查每个元素是否是可能的 abnormal 来找到解。
    • 通过每次尝试去找 abnormal 和其对应的 sum

解法

我们先来尝试通过遍历数组来实现这个思路。具体实现时,我们首先计算总和,然后假设某个元素是异常值,计算剩余部分的和来判断它是否是有效的特殊数字之和。

  1. 避免重复查找:可以通过将数组元素存储在哈希集合中,这样查找 half 是否存在可以在常数时间 O(1) 内完成。
  2. 改进的步骤
    • 计算整个数组的总和 totalSum
    • 对于每个元素,假设它是异常值 abnormal,计算 sum = totalSum - abnormal
    • 如果 sum 是偶数,可以继续判断其一半 half = sum / 2 是否是数组中的其他元素。为了更高效地查找,我们将 nums 中的元素存入哈希表 unordered_map

3、代码实现

class Solution {
public:int getLargestOutlier(vector<int>& nums) {int n = nums.size();int totalSum = 0;// 用来存储最大的异常值int maxAbnormal = INT_MIN;// 使用哈希集合存储数组中的元素, 快速查找unordered_map<int, vector<int>> hash;for (int i = 0; i < n; ++i) {hash[nums[i]].push_back(i);totalSum += nums[i];}// 遍历数组中的每一个元素,假设它是异常值for (int i = 0; i < n; ++i) {int abnormal = nums[i];int sum = totalSum - abnormal; // 假设剩余的和是 sumif (sum % 2) {continue;}int half = sum / 2;// 判断 sum 是否可以通过删除一个特殊值来得到// sum 应该是 nums 中的一个元素,并且这个元素的下标不是 ibool valid = false;if (hash.count(half)) {auto v = hash[half];for (const auto& index : v) {if (index != i) {valid = true;break;}}}// 如果找到了合法的 sum,更新最大异常值if (valid) {maxAbnormal = max(maxAbnormal, abnormal);}}return maxAbnormal == INT_MIN ? -1 : maxAbnormal; // 如果没有找到异常值,则返回 -1}
};

4、时间复杂度分析

  • 时间复杂度
    • 构建哈希集合 unordered_map 的时间复杂度是 O(n)
    • 遍历数组,针对每个元素计算 sumhalf,并通过哈希集合判断 half 是否存在,时间复杂度是 O(1)。因此,整个遍历过程的时间复杂度是 O(n)
    • 总体时间复杂度是 O(n)
  • 空间复杂度:我们使用了一个额外的哈希集合 unordered_map 来存储数组元素,因此空间复杂度是 O(n)

Q3、连接两棵树后最大目标节点数目 Ⅰ

1、题目描述

有两棵 无向 树,分别有 n 和 m 个树节点。两棵树中的节点编号分别为[0, n - 1] 和 [0, m - 1] 中的整数。

给你两个二维整数 edges1 和 edges2 ,长度分别为 n - 1 和 m - 1 ,其中 edges1[i] = [ai, bi] 表示第一棵树中节点 ai 和 bi 之间有一条边,edges2[i] = [ui, vi] 表示第二棵树中节点 ui 和 vi 之间有一条边。同时给你一个整数 k 。

如果节点 u 和节点 v 之间路径的边数小于等于 k ,那么我们称节点 u 是节点 v 的 目标节点 。注意 ,一个节点一定是它自己的 目标节点 。

请你返回一个长度为 n 的整数数组 answer ,answer[i] 表示将第一棵树中的一个节点与第二棵树中的一个节点连接一条边后,第一棵树中节点 i 的 目标节点 数目的 最大值 。

注意 ,每个查询相互独立。意味着进行下一次查询之前,你需要先把刚添加的边给删掉。

2、解题思路

  1. 树的表示与遍历
    • 我们需要计算每个节点到其他节点的路径长度。对于树来说,路径长度等于两个节点之间的跳跃边数。
    • 我们可以使用**深度优先搜索(DFS)或者广度优先搜索(BFS)**来计算从某一节点到其他节点的路径长度。
  2. 距离矩阵的构建
    • 为了快速计算两个节点之间的距离,可以利用 BFS 在每棵树上预处理节点之间的最短路径。具体来说,使用 BFS 可以得到从某个节点到所有其他节点的距离。
  3. 处理每个查询
    • 对于每个节点 i,我们需要找出在第二棵树上与 i 连接的节点,使得路径的边数小于等于 k,并且尽可能多。
    • 因为每个查询之后边会被删除,因此每个查询的结果是独立的。
  4. 最大目标节点的数目
    • 我们需要遍历树2中的每个节点,计算在第一棵树中的每个节点与该节点的连接,满足条件的目标节点的最大数目。

解决步骤

  1. 预处理树1和树2的每个节点到其他节点的最短距离,可以通过 BFS 来实现。
  2. 处理每个查询,对于每个查询,检查连接第一棵树的节点到第二棵树的每个节点的路径,计算最大目标节点数。

3、代码实现

class Solution {
public:vector<int> maxTargetNodes(vector<vector<int>>& edges1, vector<vector<int>>& edges2, int k) {int n = edges1.size() + 1; // 第一棵树的节点数int m = edges2.size() + 1; // 第二棵树的节点数// 构建树1和树2的邻接表vector<vector<int>> adj1(n), adj2(m);for (auto& edge : edges1) {adj1[edge[0]].push_back(edge[1]);adj1[edge[1]].push_back(edge[0]);}for (auto& edge : edges2) {adj2[edge[0]].push_back(edge[1]);adj2[edge[1]].push_back(edge[0]);}// 计算每个节点到其他节点的最短距离vector<vector<int>> dist1(n), dist2(m);for (int i = 0; i < n; i++) {dist1[i] = bfs(i, adj1, n);}for (int i = 0; i < m; i++) {dist2[i] = bfs(i, adj2, m);}// 对每个节点 i 计算最大目标节点数vector<int> result(n, 0);// 预计算树2每个节点的目标节点数vector<int> targetCount2(m, 0);for (int j = 0; j < m; ++j) {int count2 = 0;for (int x = 0; x < m; ++x) {if (dist2[j][x] < k) {count2++;}}targetCount2[j] = count2;}// 对树1的每个节点,计算其最大目标节点数for (int i = 0; i < n; i++) {int targetCount1 = 0;int maxTargets = 0;// 对于树 1 的目标节点个数for (int j = 0; j < n; ++j) {if (dist1[i][j] <= k) {++targetCount1;}}// 对每个树2中的节点 j, 检查目标节点数for (int j = 0; j < m; j++) {// 计算树 1 的节点 i 到树 2 的节点 j 的路径是否符合要求int count = targetCount1 + targetCount2[j];maxTargets = max(maxTargets, count);}result[i] = maxTargets;}return result;}// BFS 计算从一个节点到其他节点的最短路径vector<int> bfs(int start, const vector<vector<int>>& adj, int n) {vector<int> dist(n, -1); // -1表示未访问queue<int> q;dist[start] = 0;q.push(start);while (!q.empty()) {int node = q.front();q.pop();for (int neighbor : adj[node]) {if (dist[neighbor] == -1) { // 如果未访问过dist[neighbor] = dist[node] + 1;q.push(neighbor);}}}return dist;}
};
  1. BFS计算最短距离bfs 函数用于计算从某个节点出发,所有其他节点的最短路径。
  2. 构建邻接表:首先我们将每棵树的边表示为邻接表 adj1adj2,分别对应第一棵和第二棵树。
  3. 计算每个节点的最短路径:通过 bfs 从每个节点出发,计算到其他所有节点的最短距离,并存储在 dist1dist2 中。
  4. 遍历计算最大目标节点数:对于每个节点 i,我们遍历第二棵树的所有节点,计算其目标节点的数量。

Q4、连接两棵树后最大目标节点数目 Ⅱ

1、题目描述

有两棵 无向 树,分别有 nm 个树节点。两棵树中的节点编号分别为[0, n - 1][0, m - 1] 中的整数。

给你两个二维整数 edges1edges2 ,长度分别为 n - 1m - 1 ,其中 edges1[i] = [ai, bi] 表示第一棵树中节点 aibi 之间有一条边,edges2[i] = [ui, vi] 表示第二棵树中节点 uivi 之间有一条边。

如果节点 u 和节点 v 之间路径的边数是偶数,那么我们称节点 u 是节点 v目标节点注意 ,一个节点一定是它自己的 目标节点

请你返回一个长度为 n 的整数数组 answeranswer[i] 表示将第一棵树中的一个节点与第二棵树中的一个节点连接一条边后,第一棵树中节点 i目标节点 数目的 最大值

注意 ,每个查询相互独立。意味着进行下一次查询之前,你需要先把刚添加的边给删掉。

2、解题思路

节点目标的定义

  • 目标节点的定义是:如果节点 u 和节点 v 之间的路径的边数是偶数,那么 uv 的目标节点。
  • 每个节点一定是它自己的目标节点。

树的层次分组

  • 由于目标节点数目与路径的边数是否为偶数相关,我们可以将树的节点按层次分组。即,我们可以利用 深度优先搜索(DFS)对每棵树进行层次划分。
  • 在每棵树中,通过 DFS 遍历节点,并将节点根据奇偶层分到两个组中。对于树1,按奇偶层分组后的节点数目可以用来计算目标节点数。

最大目标节点数

  • 对于第一棵树中的每个节点 i,我们要计算该节点通过与第二棵树中节点连接后,能得到的最大目标节点数。
  • 由于目标节点的定义是与路径的奇偶性相关,因此树2中的每层节点数可以影响树1中每个节点的目标节点数。

优化

  • 通过 DFS 预处理每棵树的节点层次信息,然后利用这些信息计算每个节点的目标节点数。这样可以避免每次连接时重新计算所有节点之间的路径关系,显著提高效率。

3、代码实现

class Solution {
private:// 构建邻接表void buildGraph(vector<vector<int>>& graph, const vector<vector<int>>& edges) {for (const auto& edge : edges) {int u = edge[0], v = edge[1];graph[u].push_back(v);graph[v].push_back(u);}}// 更新树 1 中每个节点的目标节点数void updateTargetNodes(vector<int>& result, const vector<vector<int>>& layers1) {for (const auto& layer : layers1) {int layerSize = layer.size();for (int node : layer) {result[node] += layerSize; // 增加该层节点数}}}// 深度优先搜索函数, 按奇偶层分组void dfs(int node, int parent, int layer, vector<vector<int>>& graph, vector<vector<int>>& layers) {// 将当前节点加入对应层的分组layers[layer].push_back(node);// 遍历相邻节点, 递归调用 DFSfor (int neighbor : graph[node]) {// 跳过父节点if (neighbor == parent) {continue;}// 切换层次 (奇偶层)dfs(neighbor, node, 1 - layer, graph, layers);}}public:vector<int> maxTargetNodes(vector<vector<int>>& edges1, vector<vector<int>>& edges2) {int n = edges1.size() + 1; // 第一个树的节点数int m = edges2.size() + 1; // 第二个树的节点数// 构建邻接表,表示两棵树vector<vector<int>> graph1(n), graph2(m);buildGraph(graph1, edges1);buildGraph(graph2, edges2);// 存储每个树按层分组的节点vector<vector<int>> layers1(2), layers2(2);// 进行 DFS 遍历,分层存储节点dfs(0, -1, 0, graph1, layers1);dfs(0, -1, 0, graph2, layers2);// 找到树2中节点数量最多的层int maxLayerSizeInTree2 = max(layers2[0].size(), layers2[1].size());// 初始化答案数组,每个节点的目标节点数默认为树2最大层的节点数vector<int> result(n, maxLayerSizeInTree2);// 对树1中的每个节点,增加与该层节点数相等的目标节点数updateTargetNodes(result, layers1);return result;}
};

代码讲解

  1. 构建图
    • buildGraph 函数通过给定的边列表(edges1edges2)构建图的邻接表。
  2. DFS 遍历
    • dfs 函数用于对树进行深度优先搜索,并按层将节点分到两个层(奇层和偶层)。我们通过层次分组来记录树中每个节点的奇偶层信息。
  3. 计算最大目标节点数
    • updateTargetNodes 函数通过遍历树1的奇偶层,更新每个节点的目标节点数。目标节点数的增加量就是该层的节点数。
  4. 最终答案
    • 对于树1中的每个节点,初始时其目标节点数设置为树2中最大的层数(即maxLayerSizeInTree2),然后再根据树1中该节点所处的层次进行更新。

4、时间复杂度

  • 构建图的时间复杂度为 O(n + m),因为我们需要处理每一条边。
  • DFS 遍历的时间复杂度为 O(n + m),每个节点和边都只访问一次。
  • 计算每个节点的目标节点数的时间复杂度为 O(n),其中我们遍历树1的节点和层。

因此,总时间复杂度为 O(n + m)

相关文章:

第426场周赛:仅含置位位的最小整数、识别数组中的最大异常值、连接两棵树后最大目标节点数目 Ⅰ、连接两棵树后最大目标节点数目 Ⅱ

Q1、仅含置位位的最小整数 1、题目描述 给你一个正整数 n。 返回 大于等于 n 且二进制表示仅包含 置位 位的 最小 整数 x 。 置位 位指的是二进制表示中值为 1 的位。 2、解题思路 我们需要找到一个整数 x&#xff0c;使得&#xff1a; x ≥ nx 的二进制表示中仅包含置位…...

23种设计模式之外观模式

目录 1. 简介2. 代码2.1 SelectFoodService (选择食品)2.2 PayService (支付服务)2.3 TakeService (制作服务)2.4 OrderService (下单服务)2.5 Food (食品)2.6 TackingSystem &#xff08;外观类&#xff09;2.7 Test &#xff08;测试类&#xff09; 3. 优缺点3. 总结 1. 简介…...

【智商检测——DP】

题目 代码 #include <bits/stdc.h> using namespace std; const int N 1e510, M 110; int f[N][M]; int main() {int n, k;cin >> n >> k;for(int i 1; i < n; i){int x;cin >> x;f[i][0] __gcd(f[i-1][0], x);for(int j 1; j < min(i, k)…...

LeetCode-430. 扁平化多级双向链表-题解

题目链接 430. 扁平化多级双向链表 - 力扣&#xff08;LeetCode&#xff09; 题目介绍 你将得到一个双链表&#xff0c;节点包含一个“下一个”指针、一个“前一个”指针和一个额外的“子指针”。这个子指针可能指向一个单独的双向链表&#xff0c;并且这些链表也包含类似的特殊…...

【CSS】一篇掌握CSS

不是因为有了希望才去坚持,而是坚持了才有了希望 目录 一.导入方式 1.行内样式 2.内部样式 3.外部样式(常用) 二.选择器 1.基本选择器(常用) 1.1标签选择器 1.2类选择器 1.3id选择器 2.层次选择器 2.1后代选择器 2.2子选择器 2.3相邻兄弟选择器 2.4通用兄弟选择器…...

华为仓颉编程环境搭建

1、仓颉介绍 摘自华为官方&#xff1a;仓颉编程语言作为一款面向全场景应用开发的现代编程语言&#xff0c;通过现代语言特性的集成、全方位的编译优化和运行时实现、以及开箱即用的 IDE 工具链支持&#xff0c;为开发者打造友好开发体验和卓越程序性能。 其具体特性表现为&am…...

手机实时提取SIM卡打电话的信令声音-蓝牙电话如何适配eSIM卡的手机

手机实时提取SIM卡打电话的信令声音 --蓝牙电话如何适配eSIM卡的手机 一、前言 蓝牙电话的海外战略中&#xff0c;由于海外智能手机市场中政策的差异性&#xff0c;对内置eSIM卡的手机进行支持是非常合理的需求。Android系列手机中&#xff0c;无论是更换通信运营商&#xf…...

三种方式(oss、本地、minio)图片的上传下载

一、OSS 1、前期准备 1.1 注册阿里云账号&#xff0c;开启对象存储oss功能&#xff0c;创建一个bucket&#xff08;百度教程多的是&#xff0c;跟着创建一个就行&#xff0c;创建时注意存储类型是标准存储&#xff0c;读写权限是公共读&#xff09; 有的在创建桶时读写属性是…...

使用pyQT完成简单登录界面

import sysfrom PyQt6.QtGui import QMovie,QPixmap from PyQt6.QtWidgets import QApplication, QWidget, QLabel, QPushButton,QLineEdit#封装我的窗口类 class MyWidget(QWidget):#构造函数def __init__(self):#初始化父类super().__init__()# 设置窗口大小self.resize(330,…...

Postgres数据库自动化分区

一.创建自动化分区配置表并插入数据 -- Table: managerdb.par_info-- DROP TABLE IF EXISTS managerdb.par_info;CREATE TABLE IF NOT EXISTS managerdb.par_info (table_schema character varying(255) COLLATE pg_catalog."default" NOT NULL,table_name characte…...

【技术介绍】C++编程语言中的瑰宝

C&#xff0c;这门源于C语言并在其基础上进行大幅增强的编程语言&#xff0c;自诞生以来便以其独特的魅力和强大的功能吸引了无数编程者的目光。它不仅是计算机科学领域的一颗璀璨明珠&#xff0c;更是现代软件开发中不可或缺的重要工具。 解析【前言】 C的命名&#xff0c;寓…...

nginx反向代理

目录 环境准备 启动HTTP服务 配置Nginx 访问 部署 1.配置nginx 2.自动化脚本 3.执行脚本 4.使用ansible 什么是反向代理呢&#xff0c;参考nginx反向代理&#xff0c;业务部署过长中&#xff0c;常遇到的场景如下&#xff0c;通过访问域名/ip地址&#xff0c;后面接入网…...

分层图最短路

常见情形&#xff1a; 对于边有k次操作的题。。 整体思想&#xff1a; 分层图最短路可以视作是dijkstra的一个扩展&#xff0c;通常用于处理N小于10000&#xff0c;或者是k不大的情形。整体有点类似于拆点。将一个点拆成k个点处理。层与层之间互不影响。 好了我就说这么多&…...

FRU文件

FRU&#xff08;Field Replaceable Unit&#xff09;源文件的格式通常遵循IPMI FRU Information Storage Definition标准。在实际应用中&#xff0c;FRU源文件可以是JSON格式的&#xff0c;这种格式允许用户指定所有的FRU信息字段。以下是FRU源文件的JSON格式的一些关键点&…...

兔子繁衍问题

7-2 兔子繁衍问题 分数 15 全屏浏览 切换布局 作者 徐镜春 单位 浙江大学 一对兔子&#xff0c;从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死&#xff0c;请问第1个月出生的一对兔子&#xff0c;至少需要繁衍到第几个月时兔…...

飞凌嵌入式受邀亮相OpenHarmony人才生态大会2024

2024年11月27日&#xff0c;OpenHarmony人才生态大会2024在武汉洲际酒店举行。在这场汇聚了行业精英、技术大咖及生态伙伴的年度盛会上&#xff0c;飞凌嵌入式作为OpenHarmony社区的重要成员受邀出席&#xff0c;并展示了其在OpenHarmony 4.1系统适配方面的最新成果。 在大会的…...

Resrful控制器

Linux Debian 包管理器 apt DebianUbuntuKali红帽子 包管理器dnf或者yum RHELFedroaCentos Stream RHEL上游版本&#xff0c;就是什么新的内容、特性会在这个上面进行测试 运行 运行页面--dotnet blog.dll配置管理 server{listen 80;server_name m.域名;location / {proxy_p…...

Python练习(2)

重复元素判定续。利用集合的无重复性来编写一个程序如果有一个元素出现了不止一次则返回true但不要改变原来列表的值&#xff1a; 一&#xff1a; def has_duplicates(lst): # 使用集合来存储已经见过的元素 seen set() for item in lst: if item in seen: # 如果元素已经在…...

Qt清空文件夹下的内容

Qt清空文件夹下的内容 你可以使用 QDir 类来清空文件夹下的所有内容。以下是一个示例&#xff0c;展示了如何删除指定文件夹中的所有文件和子文件夹&#xff1a; #include <QCoreApplication> #include <QDir> #include <QFileInfoList> #include <QDeb…...

如何手动设置ubuntu服务器的ip、子网掩码、网关、DNS

在 Ubuntu 服务器上手动设置 IP 地址、子网掩码、网关和 DNS&#xff0c;通常有两种方式&#xff1a;使用传统的 ifconfig 命令和配置文件&#xff0c;或者使用现代的 netplan 配置方式&#xff08;对于 Ubuntu 17.10 及以后版本&#xff0c;netplan 是默认的网络配置工具&…...

单片机状态机实现多个按键同时检测单击、多击、长按等操作

1.背景 在之前有个项目需要一个或多个按键检测&#xff1a;单击、双击、长按等操作 于是写了一份基于状态机的按键检测&#xff0c;分享一下思路 2.实现效果 单击翻转绿灯电平 双击翻转红灯电平 长按反转红绿灯电平 实现状态机检测按键单击&#xff0c;双击&#xff0c;长…...

graph rag都能做哪些事情

从提供的项目目录结构看&#xff0c;系统具备高复杂度和模块化的设计&#xff0c;可能用于大规模数据处理、知识图谱构建、自然语言处理等方面。以下是一些推理出的核心能力和应用场景&#xff1a; 1. 核心模块能力&#xff1a; API 层 (api) 主要用于对外接口的定义和服务调…...

Linux 用户和用户组管理

Linux 用户和用户组管理 Linux系统是一个多用户多任务的分时操作系统&#xff0c;任何一个要使用系统资源的用户&#xff0c;都必须首先向系统管理员申请一个账号&#xff0c;然后以这个账号的身份进入系统。 用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪&…...

Python酷库之旅-第三方库Pandas(251)

目录 一、用法精讲 1186、pandas.tseries.offsets.BusinessMonthEnd.is_year_start方法 1186-1、语法 1186-2、参数 1186-3、功能 1186-4、返回值 1186-5、说明 1186-6、用法 1186-6-1、数据准备 1186-6-2、代码示例 1186-6-3、结果输出 1187、pandas.tseries.offs…...

利用Ubuntu批量下载modis图像(New)

由于最近modis原来批量下载的代码不再直接给出&#xff0c;因此&#xff0c;再次梳理如何利用Ubuntu下载modis数据。 之前的下载代码为十分长&#xff0c;现在只给出一部分&#xff0c;需要自己再补充另一部分。之前的为&#xff1a; 感谢郭师兄的指导&#xff08;https://blo…...

Redis分布式锁

一、全局ID生成器 1.1 概念 全局ID生成器&#xff0c;是一种在分布式系统下用来生成全局唯一ID的工具。具有以下特点&#xff1a; &#xff08;&#xff11;&#xff09;唯一性&#xff1b;&#xff08;&#xff12;&#xff09;高可用&#xff1b;&#xff08;&#xff13;&…...

【Maven】依赖管理

4. Maven的依赖管理 在 Java 开发中&#xff0c;项目的依赖管理是一项重要任务。通过合理管理项目的依赖关系&#xff0c;我们可以有效的管理第三方库&#xff0c;模块的引用及版本控制。而 Maven 作为一个强大的构建工具和依赖管理工具&#xff0c;为我们提供了便捷的方式来管…...

leetcode——移除数组

26.删除有序数组中的重复项 给你一个 非严格递增排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素…...

vue项目部署到github pages后页面显示不出来??

问题&#xff1a; 当我们在命令行执行 npm run build 后&#xff0c;项目的目录下会生成一个 dist 文件夹&#xff0c;它里面又包含一个 static 文件夹和一个 index.html 文件&#xff0c;这是 webpack 最终打包好的文件 项目上传到仓库后发现页面为空&#xff0c;找不到文件路…...

为什么爱用低秩矩阵

目录 为什么爱用低秩矩阵 一、定义与性质 二、区别与例子 为什么爱用低秩矩阵 我们更多地提及低秩分解而非满秩分解,主要是因为低秩分解在数据压缩、噪声去除、模型简化和特征提取等方面具有显著的优势。而满秩分解虽然能够保持数据的完整性,但在实际应用中的场景较为有限…...

如何在MySQL中计算两个日期的间隔天数

目录 1. DATEDIFF函数2. TIMESTAMPDIFF函数3. PERIOD_DIFF函数4. 函数对比 在MySQL 5.7中&#xff0c;计算两个日期之间的间隔天数是一项常见的任务。 1. DATEDIFF函数 DATEDIFF函数可以直接计算两个日期之间的天数差异。 -- 计算2024年1月1日和2024年1月10日之间的天数差异 …...

SQL面试题——抖音SQL面试题 共同问题—共同使用ip用户检测问题

共同使用ip用户检测问题 现有用户登录日志表,记录了每个用户登录的IP地址,请查询共同使用过3个及以上IP的用户对; +---+--------------+-------------------+ | id| ip| etime| +---+--------------+-------------------+ | 2|223.104.41.101|20…...

python学习笔记2

下载安装PyCharm 打开pycharm官网&#xff1a; https://www.jetbrains.com.cn/en-us/pycharm/download/?sectionwindows 找到社区版&#xff08;免费&#xff09; 下载之后打开&#xff0c;不停下一步就行 打开pycharm软件后&#xff0c;新建py文件 基本输出&#xff1a;…...

IS-IS的原理

IS-IS的基本概念&#xff1a; 概述&#xff1a; IS-IS&#xff0c;中间系统到中间系统&#xff0c;是ISO国际标准化组织为它的无连接网络协议设计的一种动态路由协议 IS-IS支持CLNP网络和IP网络&#xff0c;采用数据链路层封装&#xff0c;区别于ospf只支持IP网络&#xff0…...

现代应用程序中基于 Cell 架构的安全防护之道

在飞速发展的软件开发领域&#xff0c;基于 Cell 的架构日益流行起来。其概念源自船舶舱壁的设计准则&#xff0c;即单独的水密舱室能允许故障孤立存在。通过将这个概念应用于软件&#xff0c;我们创建了一个架构&#xff0c;将应用程序划分为离散的、可管理的组件&#xff0c;…...

Rust : 生成日历管理markdown文件的小工具

需求&#xff1a; 拟生成以下markdown管理小工具&#xff0c;这也是我日常工作日程表。 可以输入任意时间段&#xff0c;运行后就可以生成以上的markdown文件。 一、toml [package] name "rust-workfile" version "0.1.0" edition "2021"[d…...

Burp Suite 全面解析:开启你的 Web 安全测试之旅

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&a…...

RocketMQ: 消息积压问题的解决

概述 1 &#xff09; 什么是消息积压 在分布式消息系统中&#xff0c;消息积压是指消息生产速度超过消息消费速度&#xff0c;导致未处理的消息在消息队列中累积的现象这种现象可能会导致系统性能下降、资源占用增加&#xff0c;甚至影响系统的正常运行 2 &#xff09;消息积…...

Qt的定时器应用案例 || Qt的图片添加显示

目录 1.ui界面 2.头文件 3.cpp源文件 4.main文件 5.关于ui_mytimerevent.h的代码编译错误 6.图片的添加展示方式 7.结果展示 8.参考文章 1.ui界面 2.头文件 #ifndef MYTIMEREVENT_H #define MYTIMEREVENT_H#include <QMainWindow> #include <QTime> //#in…...

24.12.02 Element

import { createApp } from vue // 引入elementPlus js库 css库 import ElementPlus from element-plus import element-plus/dist/index.css //中文语言包 import zhCn from element-plus/es/locale/lang/zh-cn //图标库 import * as ElementPlusIconsVue from element-plus/i…...

web安全攻防入门教程

Web安全攻防入门教程 Web安全攻防是指在Web应用程序的开发、部署和运行过程中&#xff0c;保护Web应用免受攻击和恶意行为的技术与策略。这个领域不仅涉及防御措施的实现&#xff0c;还包括通过渗透测试、漏洞挖掘和模拟攻击来识别潜在的安全问题。 本教程将带你入门Web安全攻…...

Android——android相对布局(RelativeLayout)及各属性

参考:Android——android相对布局&#xff08;RelativeLayout&#xff09;及属性 - 艺言弈行 - 博客园 (cnblogs.com)...

初窥 HTTP 缓存

引言 对于前端来说, 你肯定听说过 HTTP 缓存。 当然不管你知不知道它, 对于提高网站性能和用户体验, 它都扮演着重要的角色! 它通过在客户端和服务器之间存储和重用先前获取的资源副本, 来减少网络流量和降低资源加载时间, 从而提升用户体验! 以下是 HTTP 缓存的重要性: 减少…...

【LeetCode】3. 哈希表: 字母异位词分组;有效的数独

题目 字母异位词分组 给你一个字符串数组&#xff0c;请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”] 输出: [[“…...

设计模式之抽象工厂 C# 范例

在设计模式中&#xff0c;抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09; 是一种创建型模式&#xff0c;它提供一个接口&#xff0c;用于创建一组相关或相互依赖的对象&#xff0c;而无需指定具体类。这种模式的关键在于通过抽象工厂来封装产品的创建&#xff…...

基于Python的猎聘网招聘数据采集与可视化分析

1.1项目简介 在现代社会&#xff0c;招聘市场的竞争日趋激烈&#xff0c;企业和求职者都希望能够更有效地找到合适的机会与人才。猎聘网作为国内领先的人力资源服务平台&#xff0c;汇聚了大量的招聘信息和求职者数据&#xff0c;为研究招聘市场趋势提供了丰富的素材。基于Pyt…...

oracle数据库的启动与关闭

一.oracle数据库的启动过程 启动实例&#xff08;Start the Instance&#xff09; 启动实例&#xff1a;一个Oracle数据库实例由内存结构和后台进程组成&#xff0c;启动实例时会加载这些内存结构和启动进程。实例是数据库的一个运行时环境&#xff0c;它包含了数据库的控制文…...

openGauss开源数据库实战十六

文章目录 任务十六 openGauss逻辑结构:触发器管理任务目标实施步骤一、测试openGauss的触发器1.创建测试表2.创建触发器对应的函数3.创建触发器4.测试触发器 二、触发器的类型1.行级触发器2.语句级触发器3.AFTER触发器和 BEFORE触发器 任务十六 openGauss逻辑结构:触发器管理 …...

智能教育的关键之一是构建智能学习系统

教育部办公厅12月27日发布《关于加强中小学人工智能教育的通知》&#xff0c;提出人工智能教育六大主要任务和举措&#xff0c;包括构建系统化课程体系、实施常态化教学与评价、开发普适化教学资源、建设泛在化教学环境、推动规模化教师供给和组织多样化交流活动。《通知》提出…...

【Linux 篇】Docker 容器星河与镜像灯塔:Linux 系统下解锁应用部署奇幻征程

文章目录 【Linux 篇】Docker 容器星河与镜像灯塔&#xff1a;Linux 系统下解锁应用部署奇幻征程前言一 、docker上部署mysql1. 拉取mysql镜像2. 创建容器3. 远程登录mysql 二 、docker上部署nginx1. 拉取nginx镜像2. 在dockerTar目录下 上传nginx.tar rz命令3. 创建nginx容器4…...