解剖—单链表相关OJ练习题
目录
一、移除链表元素
二、找出链表的中间节点
三、合并两个有序链表
四、反转链表
五、求链表中倒数第k个结点
六、链表分割
七、链表的回文结构
八、判断链表是否相交
九、判断链表中是否有环(一)
十、 判断链表中是否有环(二)
注:第六题和第七题牛客没有C环境,我在C++环境下用C语言写这道题(目前还没学C++,请大佬们理解一下,理解万岁!!)
一、移除链表元素
203. 移除链表元素 - 力扣(LeetCode)
- 给你一个链表的头节点
head和一个整数val- 请你删除链表中所有满足
Node.val == val的节点,并返回 新的头节点 。示例 1:
输入:head = [1, 2, 6, 3, 4, 5, 6], val = 6 输出:[1, 2, 3, 4, 5]
struct ListNode* removeElements(struct ListNode* head, int val) {struct ListNode* prev = NULL, * cur = head;while (cur) { if (cur->val == val) {if (prev) {prev->next = cur->next;free(cur);cur = prev->next;}else {cur = head->next;free(head);head = cur;}}else {prev = cur;cur = cur->next;}}return head;
}
思路:链表常规删除,注意删除头节点的情况。
1、创建指向当前节点的前一个节点的指针prev=NULL(头节点的前一个节点为空),指针cur指向链表头节点。
2、以当前节点cur不为空为循环执行条件,判断当前节点的值是否等于val,等于则进行删除,不等于则prev更新为当前节点cur,当前节点cur指向下一个节点。
3、当前节点的值等于val时:
- 如果值为
val的节点不在头节点(prev不为NULL),将prev的next指针指向当前节点的下一个节点,然后释放当前节点并更新。- 如果值为
val的节点在链表头节点(prev为NULL),则释放原来的头节点,将head更新为当前节点的下一个节点。
下面是第二种方法,创建新的链表,把不删除的节点链接到新链表 :
struct ListNode* removeElements(struct ListNode* head, int val) {struct ListNode* cur = head; // 当前遍历节点struct ListNode* newhead = NULL; // 新链表的头节点struct ListNode* tail = NULL; // 新链表的尾节点while (cur) {if (cur->val != val) { // 当前节点的值不等于要删除的值if (tail == NULL) { // 第一次插入newhead = tail = cur; // 设置新链表的头和尾}else {tail->next = cur; // 将当前节点连接到新链表的尾部tail = tail->next; // 更新新链表的尾节点}cur = cur->next; // 移动到下一个节点tail->next = NULL; // 断开新链表的尾节点连接}else {struct ListNode* del = cur; // 保存需要删除的节点cur = cur->next; // 移动到下一个节点free(del); // 释放需要删除的节点的内存}}return newhead; // 返回新链表的头节点,已移除所有值为 val 的节点
}
二、找出链表的中间节点
876. 链表的中间结点 - 力扣(LeetCode)
给你单链表的头结点
head,请你找出并返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。
示例 1:
输入:head = [1,2,3,4,5]
输出:[3,4,5]
解释:链表只有一个中间结点,值为 3 。
struct ListNode* middleNode(struct ListNode* head) {struct ListNode* fast = head, * slow = head;while (fast && fast->next) {slow = slow->next;fast = fast->next->next;}return slow;
}
思路:快慢双指针
1、采用速度为1步的slow和速度为2步的fast,这样设置二者速度比较合理。
2、循环结束的条件需要考虑一下,分为链表节点个数为奇数和偶数,当fast走到最后的结果如下:


3、 所以循环结束的条件为 fast && fast->next 二者有一个为空。
三、合并两个有序链表
21. 合并两个有序链表
- 将两个升序链表合并为一个新的 升序 链表并返回。新
- 链表是通过拼接给定的两个链表的所有节点组成的。
示例 1:
输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4]
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) {if (list1 == NULL)return list2;if (list2 == NULL)return list1;struct ListNode* tail = NULL, * head = NULL;while (list1 && list2) {if (list1->val < list2->val) {if (tail == NULL) {head = tail = list1;}else {tail->next = list1;tail = tail->next;}list1 = list1->next;}else {if (tail == NULL) {head = tail = list2;}else {tail->next = list2;tail = tail->next;}list2 = list2->next;}}if (list1)tail->next = list1;if (list2)tail->next = list2;return head;
}
思路:创建新链表,较小的进行链接。
好像跟顺序表的题相像合并两个有序数组
不过,这次是单链表,所以我们可以创建新链表,从前向后将较小的链接到链表中,不需要从后先前了。
1、首先判断是否有链表为空,一个链表为空,则直接返回合并后的结果:另一个不为空的链表,都为空则返回任意一个链表。
2、创建新链表的尾节点tail和头节点head,初始化为空。
3、比较 list1 和 list2 当前节点的值。
- 如果 list1 的当前节点值小于 list2 的当前节点值,将 list1 的节点添加到合并后的链表中。
- 如果 list2 的当前节点值小于等于 list1 的当前节点值,将 list2 的节点添加到合并后的链表中。
4、在向合并链表中添加节点时,需要检查 tail 是否为 NULL,
- 如果是,说明这是第一个节点,因此同时更新 head 和 tail。
- 否则,只需将新节点连接到 tail 的 next 并将 tail 更新为新节点。
5、每次添加节点后,对应的链表list需要向后移动一位。
6、最终循环结束时,如果有链表不为空,证明该链表剩余节点的值均大于另一个链表的最大值,则将该链表其余的节点依次插入新链表。
7、返回新链表头节点head。
四、反转链表
206. 反转链表
给你单链表的头节点
head,请你反转链表,并返回反转后的链表。示例 1:
输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1]
struct ListNode* reverseList(struct ListNode* head) {struct ListNode* cur = head;struct ListNode* rhead = NULL;while (cur) {struct ListNode* next = cur->next;cur->next = rhead;rhead = cur;cur = next;}return rhead;
}
思路(一): 创建新链表,从前向后取出原链表的节点进行头插。
1. 开始时,定义两个指针 `cur` 和 `rhead`。
- `cur` 指向原始链表的头部 `head`
- `rhead` 用来构建反转后的链表,初始为空,表示反转后链表的尾部。
2. 进入循环,这个循环将遍历整个链表并进行反转操作。循环的条件是 `cur` 不为 NULL,表示还有节点需要处理。
3. 在循环内部,首先创建一个临时指针 `next` 来保存 `cur` 的下一个节点,因为在修改 `cur->next` 指针之前,需要先保存下一个节点的信息,否则会丢失对它的引用。
4. 接着,将 `cur->next` 指向 `rhead`,这一步实际上是将 `cur` 的下一个节点指向反转后链表的头部,从而将 `cur` 从原链表中分离出来。
5. 更新 `rhead` 为 `cur`,这一步将 `cur` 成为反转后链表的新头部。
6. 更新 `cur` 为 `next`,这一步将 `cur` 移动到原链表中的下一个节点,准备处理下一个节点。
7. 循环继续执行,直到 `cur` 变为 NULL,表示已经遍历完整个链表。此时,`rhead` 指向反转后链表的头部。
8. 返回 `rhead`,它现在指向反转后的链表的头部,完成链表的反转。
struct ListNode* reverseList(struct ListNode* head) {if (head == NULL)return NULL;struct ListNode* n1 = NULL;struct ListNode* n2 = head;struct ListNode* n3 = n2->next;while (n2) {n2->next = n1;n1 = n2;n2 = n3;if (n3)n3 = n3->next;}return n1;
}
思路(二):调转链表方向(三指针)
n1初始化为 NULL,表示反转后的链表的尾部。n2初始化为链表的头部节点head。n3初始化为n2的下一个节点,即n2->next。
1、进入循环,这个循环将遍历整个链表并反转节点。
2、在循环内部,首先将
n2的next指针指向n1,这是为了将n2的指针方向反转,将其指向前一个节点n1,而不是原来的下一个节点。
3、接着更新
n1和n2,将它们分别向前移动一个节点。n1移动到n2的位置,n2移动到n3的位置。
4、继续检查
n3是否为 NULL。如果n3不为 NULL,将n3移动到它的下一个节点,以便在下一轮循环中使用。
5、循环继续执行,直到
n2为 NULL,表示已经遍历完整个链表。此时,n1指向原链表的最后一个节点,它成为了反转后链表的头部。
6、返回
n1,它现在指向反转后的链表的头部,完成了链表的反转。
五、求链表中倒数第k个结点
链表中倒数第k个结点_牛客题霸_牛客网 (nowcoder.com)
输入一个链表,输出该链表中倒数第k个结点。
struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ) {struct ListNode* slow=pListHead,*fast=pListHead;int n=0;while(k){if(fast==NULL)return 0;fast=fast->next;k--;}while(fast){slow=slow->next;fast=fast->next;}return slow;
}
思路: 快慢指针
快慢指针的速度都为1步,快指针先走k步,然后慢指针开始与快指针同时走,快指针走到最后为空时,慢指针则为倒数第k个节点。
1、通过while循环先让fast走k步,如果fast为空则无法求出倒数第k个节点(k大于链表长度)返回值为0。
2、第二个while循环slow和fast开始同时向后走,fast为空时,slow指向的节点即为所求倒数第k个节点。
六、链表分割
链表的回文结构_牛客题霸_牛客网 (nowcoder.com)
现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。
class Partition {
public:ListNode* partition(ListNode* pHead, int x) {struct ListNode* lesshead, * lesstail, * greaterhead, * greatertail;lesshead = lesstail = (struct ListNode*)malloc(sizeof(struct ListNode));greaterhead = greatertail = (struct ListNode*)malloc(sizeof(struct ListNode));struct ListNode* cur = pHead;while (cur) {if (cur->val < x) {lesstail->next = cur;lesstail = lesstail->next;}else {greatertail->next = cur;greatertail = greatertail->next;}cur = cur->next;}lesstail->next = greaterhead->next;greatertail->next = NULL;pHead = lesshead->next;free(lesshead);free(greaterhead);return pHead;}
};
思路:假设x=5,链表各节点值为
如下图:

1、创建变量* lesshead, * lesstail为小于x的链表的头节点和尾节点,
* greaterhead, * greatertail 为大于x的链表的头节点和尾节点。
- 为两个新链表头节点开辟空间,储存值val和指向下一个节点next。
2、在循环中判断cur的值是否小于x,小于则将cur链接到less链表,不小于则链接到grearter链表。
3、两个新链表需要链接合并成完整链表。
4、greatertail->next = NULL;
- 这一步一定不能少,否则可以会出现循环链表:
七、链表的回文结构
链表的回文结构_牛客题霸_牛客网 (nowcoder.com)
对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。
给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。
测试样例:
1->2->2->1 返回:true
class PalindromeList {
public:struct ListNode* middleNode(struct ListNode* head){struct ListNode* slow=head;struct ListNode* fast=head;while(fast&&fast->next){fast=fast->next->next;slow=slow->next;}return slow;}struct ListNode* reverseList(struct ListNode* head){struct ListNode* cur=head,*rhead=NULL;while(cur){struct ListNode* next=cur->next;cur->next=rhead;rhead=cur;cur=next;}return rhead;}bool chkPalindrome(ListNode* head) {struct ListNode* mid=middleNode(head);struct ListNode* rmid=reverseList(mid);while(rmid){if(rmid->val==head->val){rmid=rmid->next;head=head->next;}else{return false;}}return true;}
};
思路:从中间点开始逆置,
八、判断链表是否相交
160. 相交链表
给你两个单链表的头节点
headA和headB
- 请你找出并返回两个单链表相交的节点。
- 如果两个链表不存在相交节点,返回
null。图示两个链表在节点
c1开始相交:
- 题目数据 保证 整个链式结构中不存在环。
- 注意,函数返回结果后,链表必须 保持其原始结构 。
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {struct ListNode * tailA=headA;struct ListNode * tailB=headB;int lenA=1,lenB=1;while(tailA->next){tailA=tailA->next;lenA++;}while(tailB->next){tailB=tailB->next;lenB++;}if(tailA!=tailB){return NULL;}int gap=abs(lenA-lenB);struct ListNode * longList=headA;struct ListNode * shortList=headB;if(lenA<lenB){longList=headB;shortList=headA;}while(gap--){longList=longList->next;}while(longList!=shortList){longList=longList->next;shortList=shortList->next;}return longList;
}
思路:长的链表走相差长度步数,然后短的开始和长的同时走,节点地址相等则相交。
1、定义变量 tailA 和 tailB 分别指向链表A和B的头节点,分别遍历对应链表获得链表长度lenA和lenB,因为while循环结束条件是tail->next为空,所以len的值初始化为1。
2、通过比较
tailA和tailB是否相等来判断两个链表的尾节点是否一致。如果不相等,说明两个链表不可能有公共节点,直接返回NULL。
3、使用abs函数求出链表A与B长度差值,差值赋值给变量gap。
4、 创建两个指针longlist和shortlist分别指向链表A和B的头节点,然后判断链表大小,如果lenA大于lenB,则 longList=headB,否则 shortList=headA。
5、 longlist先向后走gap步,为了保持和shortlist同步遍历。
6、longlist和shortlist同时向后遍历,当二者相等时,停止遍历返回二者任意一个即为两个单链表相交的起始节点。
九、判断链表中是否有环(一)
141. 环形链表
给你一个链表的头节点
head,判断链表中是否有环。注意:
pos不作为参数进行传递 。仅仅是为了标识链表的实际情况。
如果链表中存在环 ,则返回
true。 否则,返回false。示例 1:
输入:head = [3,2,0,-4], pos = 1
输出:true
解释:链表中有一个环,其尾部连接到第二个节点。
bool hasCycle(struct ListNode *head) {struct ListNode *fast=head;struct ListNode *slow=head;while(fast&&fast->next){fast=fast->next->next;slow=slow->next;if(fast==slow)return true;}return false;
}
思路:快慢指针
指针slow一次走一步,指针fast一次走两步,这样在链表中走,如果有环存在则二者一定会相遇,因为fast是slow速度的两倍。如果fast走到最后为空,证明该链表没有环存在。
当fast步数
十、 判断链表中是否有环(二)
142. 环形链表 II
给定一个链表的头节点
head
返回链表开始入环的第一个节点。
如果链表无环,则返回
null。不允许修改 链表。
示例 1:
输入:head = [3,2,0,-4], pos = 1
输出:返回索引为 1 的链表节点
解释:链表中有一个环,其尾部连接到第二个节点。
struct ListNode* detectCycle(struct ListNode* head) {struct ListNode* fast = head;struct ListNode* slow = head;while (fast && fast->next) {slow = slow->next;fast = fast->next->next;if (fast == slow) {struct ListNode* meet = slow;while (head != meet) {head = head->next;meet = meet->next;}return meet;}}return NULL;
}
思路:快慢指针
slow一次走一步,fast一次走两步,他们都从头节点head位置开始移动。
设head到入环节点的距离为L,假设第一次相遇位置为meet,入环节点到meet的距离为X,相遇位置到入环节点的距离为环的周长C减去X。
slow走的路程:L+X
fast走的路程: L+X+n*C(slow进环前,fast走了n圈,比如:环很小则fast可能走了好几圈slow才进环)。
因为fast的速度是slow的两倍,所以fast走的路程是slow的两倍,一圈之内fast一定追上slow!!
由此可以得到以下关系式:2(L+X)=L+X+n*C
化简得到:L=n*C-X 即 L=(n-1)C+C-X,
这样就知道了 L=C-X,即一个指针从相遇点开始走,一个指针从头节点开始走,他们会在入环点相遇。
相关文章:
解剖—单链表相关OJ练习题
目录 一、移除链表元素 二、找出链表的中间节点 三、合并两个有序链表 四、反转链表 五、求链表中倒数第k个结点 六、链表分割 七、链表的回文结构 八、判断链表是否相交 九、判断链表中是否有环(一) 十、 判断链表中是否有环(二) 注:第六题和第七题牛…...
php对接飞书机器人
有同事接到对接飞书机器人任务,开发中遇到响应错误: {"code": 19021,"msg": "sign match fail or timestamp is not within one hour from current time" } 意思应该就是签名错误或者时间戳不在有效范围内等,…...
中间件安全-CVE复现IISApacheTomcatNginx漏洞复现
目录 中间件安全&CVE复现&IIS&Apache&Tomcat&Nginx漏洞复现中间件-IIS安全问题中间件-Nginx安全问题漏洞复现Nginx 解析漏洞复现Nginx 文件名逻辑漏洞 中间件-Apache-RCE&目录遍历&文件解析等安全问题漏洞复现漏洞复现CVE_2021_42013 RCE代码执行&…...
@ResponseBodyAdvice @RequestBodyAdivce失效
背景 最近项目要有向外部提供服务的能力,但是考虑到数据安全问题,要对接口进行加解密;实现加解密的方案有很多,比如过滤器、拦截器、继承RequestResponseBodyMethodProcessor什么的,不过我最近正在了解ResponseBodyAd…...
【c#】Quartz开源任务调度框架学习及练习Demo
Quartz开源任务调度框架学习及练习Demo 1、定义、作用 2、原理 3、使用步骤 4、使用场景 5、Demo代码参考示例 6、注意事项 7、一些Trigger属性说明 1、定义、作用 Quartz是一个开源的任务调度框架,作用是支持开发人员可以定时处理业务,比如定时…...
spring cloud Eureka集群模式搭建(IDEA中运行)
spring cloud Eureka集群模式搭建(IDEA中运行) 新建springboot 工程工程整体目录配置文件IDEA中部署以jar包形式启动总结 新建springboot 工程 新建一个springboot 工程,命名为:eureka_server。 其中pom.xml文件为: …...
数据迁移一致性测试探索与实践
背景 量级庞大的日志通过mysql不足以支撑业务需求,以前通过任务调度定时跑批从mysql同步到hive存储,这种方式时效性为T1,也就是说今天的日志,明天才能同步到hive,总而言之时效性不高。为了提高时效性,改为…...
---图的遍历和最小生成树
广度优先遍历 --- 针对的是顶点遍历 深度优先遍历 如果给的图不是连通图?以某个点为起点就没有遍历完成。那么怎么保证遍历完剩下的点呢?? 在标记数组当中找没有遍历过的点,在进行遍历 最小生成树 生成树:一个连通…...
中文编程工具开发语言编程案例:会员VIP管理系统软件实例
中文编程工具开发语言编程案例:会员VIP管理系统软件实例 中文编程工具开发语言编程案例:会员VIP管理系统软件实例。 软件功能: 1、系统设置:参数设定,账号及权限设置,系统初始化,卡类型设置&a…...
Hive用户中文使用手册系列(四)
Python Client 在github 上上可以使用 Python client 驱动程序。有关安装说明,请参阅设置 HiveServer2:Python Client 驱动程序。 Ruby Client 一个 Ruby client 驱动程序在https://github.com/forward3d/rbhive的 github 上可用。 与 SQuirrel SQL …...
高级深入--day37
手机App抓包爬虫 1. items.py class DouyuspiderItem(scrapy.Item):name scrapy.Field()# 存储照片的名字imagesUrls scrapy.Field()# 照片的url路径imagesPath scrapy.Field()# 照片保存在本地的路径2. spiders/douyu.py import scrapy import json from douyuSpider.it…...
Web自动化测试:测试用例断言!
运行测试用例时,需要判断用例是否执行成功,此时需要有一个我们期望的结果来进行验证。这里unittest中,如果一个case执行的过程中报错,或者我们判断结果不符合期望,就会判定此条用例执行失败,判断的条件主要…...
基于SSM的培训学校教学管理平台的设计与实现
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…...
2019年亚太杯APMCM数学建模大赛A题基于图像分析的二氧化硅熔化表示模型求解全过程文档及程序
2019年亚太杯APMCM数学建模大赛 A题 基于图像分析的二氧化硅熔化表示模型 原题再现 铁尾矿的主要成分是二氧化硅,而二氧化硅是铁尾矿成分中最难熔化的部分。因此,铁尾矿的熔融行为可以用二氧化硅的熔融行为来表示。然而,高温熔池的温度超过…...
C++之继承<2>【详解】
C之继承<2>【详解】 1. 派生类的默认成员函数1.1 1. 构造成员函数1.2 拷贝复制1.3 构造函数和析构函数的执行顺序 2. 继承和友元3. 继承与静态成员 1. 派生类的默认成员函数 1.1 1. 构造成员函数 派生类的构造函数必须调用基类的构造函数初始化基类的那…...
解决Kafka新消费者组导致重复消费的问题
问题描述:在使用Kafka时,当我们向新的消费者组中添加消费者时,可能会遇到重复消费的问题。本文将介绍一些解决这个问题的方法,帮助开发者更好地处理Kafka中的消费者组和消费偏移量。 Kafka是一个强大的分布式消息队列系统…...
公允价值会计(fair-value accounting)
《公允价值会计》是2008年经济科学出版社出版图书。 公允价值会计又称市值会计,是指以市场价值或未来现金流量的现值作为资产和负债的主要计量属性的会计模式。随着现代交通和通讯技术的发展,在工业社会中相互分割的市场正在走向世界一体化,…...
【java调取第三方接口,获取数据并保存至数据库】
java调取第三方接口,获取数据并保存至数据库 Overridepublic void doPost() {// 创建Httpclient对象CloseableHttpClient httpClient HttpClients.createDefault();CloseableHttpResponse response null;String resultString "";String url "htt…...
图论01-【无权无向】-图的基本表示-邻接矩阵/邻接表
文章目录 1. 代码仓库2. 图的基本表示的比较3. 邻接矩阵:Array和TreeSet3.1 图示3.2 Array主要代码解析3.3 测试输出3.4 使用TreeSet的代码 4. 邻接表:LinkedList4.1 图示4.2 LinkedList主要代码解析4.3 测试输出 5. 完整代码5.1 邻接表 - Array5.2 邻接…...
Bootstrap的列表组相关知识
目录 01-列表组的相关基础知识02-一个简单的列表组示例03-激活或禁用列表组的一行或多行04-设置列表项的颜色05-给列表项添加徽章 01-列表组的相关基础知识 Bootstrap的list-group是一个用于创建列表组件的CSS类,通常用于显示一个项目列表,如导航菜单或…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...


