单链表常见面试题 —— LeetCode
一.删除链表中与val相等的所有节点
1.题目描述 ----- 203. 移除链表元素 - 力扣(LeetCode)
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
- 列表中的节点数目在范围 [0, 10^4]
- 1 <= Node.val <= 50
- 0 <= val <= 50
2.思路分析
思路分析: 快慢指针: 定义一个slow指针和一个fast指针;
- fast指针用于遍历链表, 查找链表和val相同的节点
- slow指针用于删除fast查找的和val相同的节点
- fast指向和val相同的节点时, 让slow的下一个指向fast的下一个(不是slow改变了, 是它的下一个指向改变), fast后移; fast指向和val不相等的节点时, 直接让slow指向fast, fast后移
3.算法过程
- 定义快慢指针, 快指针用于遍历链表, 慢指针用于删除和val相同的节点
slow = head; fast = head.next; - 遍历链表, 把和val相同的节点都删掉 a.
- 快指针的val是否和给定的val相同
slow.next = fast.next; fast = fast.next; - 快指针的val和给定的val不相同
slow = fast; fast = fast.next;
- 快指针的val是否和给定的val相同
- 判断头节点: 因为我们是从第二个节点开始判断的
if(head.val == val) head = head.next;
4.代码详解
class Solution {public ListNode removeElements(ListNode head, int val) {// 判空if (head == null) return head;// 定义前驱和后继// 前驱用于指向不是和 val 相等的节点// 后继用于遍历链表ListNode prev = head;ListNode cur = head.next;while (cur != null) {// 节点值和 val 相等if (cur.val == val) {// 让前驱 prev 指向后继 cur 的下一个节点处prev.next = cur.next;} else {// 不相等,让前驱 prev 走一步prev = prev.next;}// 继续判断下一个节点cur = cur.next;}// 头节点和 val 相等的情况if (head.val == val) {head = head.next;}// 返回修改后的链表return head;}
}
二.反转链表
1.题目描述 ----- 206. 反转链表 - 力扣(LeetCode)
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
- 链表中节点的数目范围是 [0, 5000]
- -5000 <= Node.val <= 5000
2.思路分析
思路分析: 遍历+头插: 使用cur指针进行边遍历边头插
- 让cur指针指向head的下一个节点, 遍历cur;
- 使用curNext指针指向cur的下一个节点, 即记录cur的下一节点的位置
- 进行头插, 把cur的下一个指向head, 让head又指向cur
- cur重新指向curNext, 即保存了cur的下一个节点的指针
3.算法过程
- head为空, 直接返回head
if(head == null) return head; - 定义cur, cur指向head.next
cur = head.next; - 把head.next置空, 防止形成环
head.next = null; - 遍历cur链表
- 保存cur的下一个节点的位置, 防止找不到无法进行反转
curNext = cur.next; - 进行头插法
cur.next = head; head = cur; - cur指向下一个节点(遍历)
cur = curNext;
- 保存cur的下一个节点的位置, 防止找不到无法进行反转
- 返回反转后的链表 return head;
4.代码详解
class Solution {public ListNode reverseList(ListNode head) {// 判空if (head == null) return head;// 获取头节点之后的节点ListNode cur = head.next;// 把头节点之后的节点置空,防止循环链表head.next = null;// 当 cur 为空后,跳出循环while (cur != null) {// 获取 cur 的下一个节点ListNode curNext = cur.next;// 头插cur.next = head;head = cur;// cur 重新指向 cur 的下一个节点cur = curNext;}// 返回翻转后的头节点return head;}
}
三.返回链表的中间节点
1.题目描述 ----- 876. 链表的中间结点 - 力扣(LeetCode)
给你单链表的头结点 head ,请你找出并返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。
- 链表的结点数范围是 [1, 100]
- 1 <= Node.val <= 100
2.思路分析
思路分析: 快慢指针
当快指针的速度是慢指针的2倍时, 快指针走完链表后, 慢指针刚好到链表的中间位置
3.算法过程
- 定义快慢指针
fast = head; slow = head; - 遍历链表, 快指针每次走两步, 慢指针每次走一步
fast = fast.next.next; slow = slow.next; - 链表结束条件: 快指针走的快, 当快指针走完链表, 即遍历结束
while(fast != null && fast.next != null);
4.代码详解
class Solution {public ListNode middleNode(ListNode head) {// 定义快慢指针ListNode slow = head;ListNode fast = head;// fast 为空或 fast.next 为空则跳出循环while (fast != null && fast.next != null) {// slow 走一步slow = slow.next;// fast 走两步fast = fast.next.next;}// 返回中间节点return slow;}
}
四.输出链表的倒数第k个节点
1.题目描述 ----- 面试题 02.02. 返回倒数第 k 个节点 - 力扣(LeetCode)
实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。
给定的 k 保证是有效的。
2.思路分析
思路分析: 快慢指针
快指针先走k步后, 此时快慢指针的差距是k步, 然后快慢指针一起走, 快指针走完链表后, 慢指针走到倒数第k个位置处
3.算法过程
- 定义快慢指针
fast = head; slow = head; - 快指针先走k步
for(i = 0; i < k; i++) fast = fast.next; - 快慢指针一起走,快指针走完,慢指针到倒数第k个位置处
while(fast != null) fast = fast.next; slow = slow.next; - 返回倒数第k个位置处的值 return slow.val;
4.代码详解
class Solution {public int kthToLast(ListNode head, int k) {// 定义快慢指针ListNode slow = head;ListNode fast = head;// 让 fast 先走 k 步for (int i = 0; i < k; i++) {fast = fast.next;}// 此时,fast 已经领先 slow k 步// 两个一起走,当 fast 到达最后一个节点的时候,slow 走到第 k 个节点while (fast != null) {fast = fast.next;slow = slow.next;}// 返回 slow 处的值return slow.val;}
}
五.合并有序链表
1.题目描述 ----- 21. 合并两个有序链表 - 力扣(LeetCode)
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
- 两个链表的节点数目范围是 [0, 50]
- -100 <= Node.val <= 100
- l1 l2 非递减顺序
2.思路分析
思路分析: 模拟
比较节点的大小, 那个值小则把该节点放到connection链表的后面, 那个链表为空后, 则把另一个链表放在connection的后面;
3.算法过程
- 定义连接节点和新的头节点
connection = new ListNode(); head = connection; - 循环遍历, 当list1和list2均空则跳出循环
- list1为空, 则把list2的所有节点放到connection的后面, 跳出循环
connection.next = list2; break; - list2为空, 则把list1的所有节点放到connection的后面, 跳出循环
connection.next = list1; break; - 若list1.val < list2.val
connection.next = list1;
list1 = list1.next; //后移
connection = connection.next; //后移 - 若list1.val > list2.val
connection.next = list1;
list1 = list1.next; //后移
connection = connection.next; //后移
- list1为空, 则把list2的所有节点放到connection的后面, 跳出循环
- 返回头节点 return head.next;
4.代码详解
class Solution {public ListNode mergeTwoLists(ListNode list1, ListNode list2) {// 其中一个链表为空if (list1 == null) return list2;if (list2 == null) return list1;// 定义连接链表ListNode dummy = new ListNode();// 定义新的头节点ListNode newHead = dummy;// 当 list1 和 list2 均为空,跳出循环while (list1 != null || list2 != null) {if (list1 == null) {// list1 为空,把 list2 的节点全部放在 dummy 后面dummy.next = list2;break;} else if (list2 == null) {// list2 为空,把 list1 的节点全部放在 dummy 后面dummy.next = list1;break;} else if (list1.val < list2.val) {// list1 节点值小于 list2 节点值,把 list1 的节点放在 dummy 后面dummy.next = list1;// 让 list1 走到下一个节点处list1 = list1.next;} else {// list2 节点值小于 list1 节点值,把 list2 的节点放在 dummy 后面dummy.next = list2;// 让 list2 走到下一个节点处list2 = list2.next;}// 让 dummy 走到下一个节点处dummy = dummy.next;}// 返回头节点return newHead.next;}
}
六.分割链表
1.题目描述 ----- 面试题 02.04. 分割链表 - 力扣(LeetCode)
给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。
你不需要 保留 每个分区中各节点的初始相对位置。
- 链表中节点的数目在范围 [0, 200]
- -100 <= Node.val <= 100
- -200 <= x <= 200
2.思路分析
思路分析: 模拟
- 定义四个链表, minVal链表存储比x小的节点, maxVal链表存储比x大的节点;
minHead指向minVal, maxHead指向maxVal - 循环head链表, 把比x小的节点放入到minVal链表中, 比x大的节点放入到maxVal链表中
- 防止形成环, 把maxVal.next置为空, 因为最大的值不一定是最后一个
- 连接两个链表, 并返回新链表的头节点
3.算法过程
- 创建两个链表,定义头节点 minVal, maxVal = new ListNode();
minHead = minVal; maxHead = maxVal; - 循环head链表, 把节点值小于x的放到minVal中, 比x大的放入到maxVal中
if(cur.val < x) minVal.next = cur; minVal = minVal.next;
else maxVal.next = cur; maxVal = maxVal.next; - 把maxVal的next置为空, 防止形成环
maxVal.next = null; - 连接两个链表
minVal.next = maxHead.next; - 返回新链表 return minHead.next;
4.代码详解
class Solution {public ListNode partition(ListNode head, int x) {// 使用 prev 来获取小于 x 值的链表节点ListNode prev = new ListNode();// 指向 prev 的节点,用于后续返回结果ListNode newHead = prev;// 使用 last 来获取 大于等于 x 值的链表节点ListNode last = new ListNode();// 使用 headLast来指向 last 的头节点,方便连接ListNode headLast = last;// 遍历链表节点ListNode cur = head;// 为空跳出循环while (cur != null) {// 小于 x 的链表节点值的节点都放在 prev 链表下if (cur.val < x) {prev.next = cur;prev = prev.next;} else {// 大于等于 x 的链表节点值的节点都放在 last 链表下last.next = cur;last = last.next;}// cur 获取下一个节点cur = cur.next;}// 防止 last 的最后一个节点不是链表的最后一个节点last.next = null;// 连接prev.next = headLast.next;// 返回return newHead.next;}
}
七.回文链表
1.题目描述 ----- LCR 027. 回文链表 - 力扣(LeetCode)
给定一个链表的 头节点 head ,请判断其是否为回文链表。
如果一个链表是回文,那么链表节点序列从前往后看和从后往前看是相同的。
- 链表 L 的长度范围为 [1, 10^5]
- 0 <= node.val <= 9
2.思路分析
思路分析: 快慢指针 + 头插法 + 前后指针比较
- 定义快慢指针, 找到中间节点
- 把中间节点之后的元素都进行头插
- 使用slow指针和fast指针比较值, 不同则不是回文
3.算法过程
- 定义快慢指针
fast = head; slow = head; - 循环链表, 快指针每次走两步, 慢指针每次走一步, 找到中间节点
fast = fast.next.next; slow = slow.next; - 在中间节点进行头插
curNext = cur.next;
cur.next = slow;
slow = cur;
cur = curNext; - 重置快指针, 快慢指针相等则说明为回文链表
fast = head;
while(fast != slow)
if(fast.val != slow.val) return false;
if(fast.next == slow) return true; // 偶数个节点 - 跳出循环, 说明是回文链表 return true;
4.代码详解
class Solution {public boolean isPalindrome(ListNode head) {// 定义快慢指针ListNode fast = head;ListNode slow = head;// fast 为空或 fast.next为空跳出循环while(fast != null && fast.next != null) {// fast 每次走两步fast = fast.next.next;// slow 每次走一步slow = slow.next;}// 头插// 把 slow 后面的节点进行头插ListNode cur = slow.next;while(cur != null) {// 记录 cur 的下一个节点ListNode curNext = cur.next;// 头插cur.next = slow;// 重置头节点slow = cur;// 获取下一个节点cur = curNext;}// 重置 fastfast = head;// 当相遇时跳出循环,说明是回文链表while(fast != slow) {// 值不相等则说明不是回文链表if(fast.val != slow.val) {return false;}// 节点为偶数个的回文链表if(fast.next == slow) {break;}// fast 和 slow 均走一步fast = fast.next;slow = slow.next;}// 返回结果return true;}
}
八.链表的公共节点
1.题目描述 ----- 160. 相交链表 - 力扣(LeetCode)
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。
- listA的数目为 m
- listB的数目为n
- 1 <= m, n <= 3 * 10^4
- 1 <= Node.val <= 10^5
- 0 <= skipA <= m
- 0 <= skipB <= n
- 如果 listA 和listB 没有交点, intersectVal 为0
- 如果 listA 和listB 有交点, intersectVal == listA[skipA] == listB[skipB]
2.思路分析
思路分析: 模拟.
获取两个两个链表的长度, 判断出谁长, 使用一个引用指向最长的那个链表, 另一个引用指向最短的那个链表;让最长的那个链表先走两个链表的差值步, 然后两个一起走, 即可得到相遇点
3.算法过程
- 获取两个链表的长度
l1 = size(A); l2 = size(B); - 区分最长和最短的链表, 获取两者的差值步
cur1 = 最长的链表; cur = 最短的链表; gap = size(长链表) - size(短链表); - 让最长的链表先走两者的差值步
for(int i = 0; i < gap; i++) cur1 = cur1.next; - 长短链表一起走, 相遇即是相遇点
while(cur1 != cur2) cur1 = cur1.next; cur2 = cur2.next; - 返回相遇点 return cur1;
4.代码详解
public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {// cur1 用来指向长度最长的链表,默认是 headAListNode cur1 = headA;// cur2 用来指向长度最短的链表,默认是 headBListNode cur2 = headB;// 计算两个链表的长度int size1 = count(headA);int size2 = count(headB);// 用来获取两个链表的长度差int gap = 0;if (size1 > size2) {// 这个地方说明 headA 的链表长度最长// 计算两个链表的长度差即可gap = size1 - size2;} else {// 这个地方说明 headB 的链表长度最长// 重置 cur1 和 cur2,让他们分别指向最长和最短的链表cur1 = headB;cur2 = headA;// 链表长度的差值gap = size2 - size1;}// 让最长的链表先走差值步for (int i = 0; i < gap; i++) {cur1 = cur1.next;}// 两个链表一起走,相等则说明走到了公共节点while (cur1 != cur2) {cur1 = cur1.next;cur2 = cur2.next;}// 返回公共节点return cur1;}// 计算链表的节点数private int count(ListNode head) {int count = 0;ListNode cur = head;while (cur != null) {count++;cur = cur.next;}return count;}
}
九.判断链表是否有环
1.题目描述 ----- 141. 环形链表 - 力扣(LeetCode)
给你一个链表的头节点 head ,判断链表中是否有环。
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。
如果链表中存在环 ,则返回 true 。 否则,返回 false 。
- 链表中节点的数目范围是 [0, 10^4]
- -10^5 <= Node.val <= 10^5
- pos 为 -1 或 有效索引
2.思路分析
思路分析: 快慢指针.
让快指针每次走两步, 慢指针每次走一步; 若是存在环, 那么两者必会相遇, 若不存在环, 则跳出循环, 返回false
3.算法过程
- 判断head是否有节点
if(head == null) return false; - 定义快慢指针
fast = head; slow = head; - 循环遍历快指针, 快指针每次走两步, 慢指针每次走一步, 无环则会跳出循环, 有环则会相遇
fast = fast.next.next; slow = slow.next; - 无环跳出循环后返回false return false;
4.代码详解
public class Solution {public boolean hasCycle(ListNode head) {// 初始化快慢指针ListNode slow = head;ListNode fast = head;// 判断快指针当前是否为空或快指针的下一个节点是否为空while (fast != null && fast.next != null) {// fast每次走两步fast = fast.next.next;// slow每次走一步slow = slow.next;// 相等, 遇到环if (fast == slow)return true;}// 不存在环return false;}
}
思考: 一定要快指针每次跳两步, 慢指针跳一步嘛? 快指针一次跳三步或四步可行嘛?
解释: 两个节点的有环链表画图能理解为什么要只走两步
十.链表的入环点
1.题目描述 ----- 142. 环形链表 II - 力扣(LeetCode)
给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。
- 链表中节点的数目范围在范围 [0, 10^4]
- -10^5 <= Node.val <= 10^5
- pos 为-1或为一个有效的索引
2.思路分析
思路分析: 快慢指针
让快指针每次走两步, 慢指针每次走一步; 相遇后跳出循环, 然后让快指针回溯到head节点的位置, 快慢指针一起走, 相遇点即为入环点
3.算法过程
- head判空
if(head == null) return head; - 定义快慢指针,快指针每次走两步, 慢指针每次走一步, 相遇跳出循环
fast = fast.next.next; slow = slow.next; if(fast == slow) break; - 判断无环的情况
if(fast == null || fast.next == null) return null; - fast重指向head fast = head
- fast和slow一起走, 相遇点即为入环点
while(fast != slow) fast = fast.next; slow = slow.next; - 返回入环点 return fast;
4.代码详解
public class Solution {public ListNode detectCycle(ListNode head) {// 一个节点也没有if (head == null) return null;// 定义快慢指针ListNode slow = head;ListNode fast = head;// fast 不为空或 fast.next 不为空while (fast != null && fast.next != null) {// fast 每次走两步fast = fast.next.next;// slow 每次走一步slow = slow.next;// 相遇跳出循环if (fast == slow) {break;}}// 两种情况// 1.无环的情况下,会跳出循环// 2.有环的情况,相遇后跳出循环// 这里判断无环的情况if (fast == null || fast.next == null) {return null;}// 重置快指针fast = head;// 快慢指针相遇点即为入换点while (fast != slow) {fast = fast.next;slow = slow.next;}// 返回入环点return fast;}
}
相关文章:
单链表常见面试题 —— LeetCode
一.删除链表中与val相等的所有节点 1.题目描述 ----- 203. 移除链表元素 - 力扣(LeetCode) 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 列表中的节点数目在范…...
Pydantic中的discriminator:优雅地处理联合类型详解
Pydantic中的discriminator:优雅地处理联合类型详解 引言1. 什么是discriminator?2. 基本使用示例3. discriminator的工作原理4. 更复杂的实际应用场景5. 使用建议6. 潜在陷阱和注意事项结论最佳实践 引言 在Python的类型系统中,有时我们需要…...
pgloader SQLSERVER -> PostgreSQL 配置文件样例
pgloader 是什么?安装和基本用户法可以去其他同道的blog上去看,这里不占用网络空间了。刚开始用官方的文档读起还是很费劲的,所以把常用的配置例子放在这里。 官方文档:https://pgloader.readthedocs.io/en/latest/index.html 迁…...
APP、小程序对接聚合广告平台,有哪些广告变现策略?
开发者对接聚合广告平台,可以让自身流量价值最大化,获得更多的广告曝光机会,对接单一的广告联盟容易造成广告填充不足,收益不稳定的问题。#APP广告变现# APP开发者根据应用的生命周期、用户特征和产品定位,选择最适合…...

HarmonyOs DevEco Studio小技巧39-模拟器的使用
使用环境 模拟器在本地计算机上创建和运行,在运行和调试应用/元服务时可以保持良好的流畅性和稳定性,但是需要耗费一定的计算机资源,具体的运行环境要求为: 系统类型 运行环境要求 Windows(X86) Windows 10 企业版、专业版或教…...

【C语言】浮点数的原理、整型如何转换成浮点数
众所周知C语言中浮点数占四个字节,无论在32位或者64位机器上。不免会发出疑问四个字节是怎么计算出小数的呢?其实物理存放还是按照整型存放的。 IEEE 754 单精度浮点数格式 浮点数在计算机中是使用 IEEE 754 标准进行表示的。在 IEEE 754 标准中&#…...

TesseractOCR-GUI:基于WPF/C#构建TesseractOCR简单易用的用户界面
前言 前篇文章使用Tesseract进行图片文字识别介绍了如何安装TesseractOCR与TesseractOCR的命令行使用。但在日常使用过程中,命令行使用还是不太方便的,因此今天介绍一下如何使用WPF/C#构建TesseractOCR简单易用的用户界面。 普通用户使用 参照上一篇教…...

Elasticsearch高性能实践
前言 本方案主要从运维层面分析es是实际生产使用过程中的参数优化,深入理解es各个名词及含义,深入分析es的使用过程中应注意的点,详细解释参数设置的原因以及目的,主要包括系统层面,参数层面。除此之外,优…...

软件测试--录制与回放脚本
准备工作 安装phpstudy 配置两个内容 放demo44文件夹 在浏览器输入http://localhost/demo44/index.html,出现如图所示的网站 输入用户名和密码 步骤一:打开Virtual User Generator,点击新建,点击new 步骤二:点击如下…...
nodejs 06.npm的使用以及package.json详解
一.npm(npm | Home)的介绍 npm(Node Package Manager)是一个node.js的包管理工具,允许用户下载安装更新分享node.js包 二.npm相关命令以及作用 1.npm init -y 这条命令主要是当项目中没有package.json这个文件的时候生成package.json这个文件 2.npm i / npm install (包名) 这条…...

如何使用WinCC DataMonitor基于Web发布浏览Excel报表文档
本文介绍使用 WinCC DataMonitor 的 "Excel Workbooks" 功能,通过 Excel 表格显示 WinCC 项目的过程值、归档变量值和报警归档消息。并可以通过 Web 发布浏览访问数据 1.WinCC DataMonitor是什么 ? DataMonitor 是 SIMATIC WinCC 工厂智能中…...

颜色的基本处理
数码相机能够获取彩色图像,但相机的色彩处理是一个非常复杂的过程,是非常重要的。 此过程生产制造商在细节方面都是不公布的,但是基本的概念是相同的。当相机捕捉一个真实场景时,是怎么还原成人眼所看到的图像呢? 1.R…...
跟李笑来学美式俚语(Most Common American Idioms): Part 66
Most Common American Idioms: Part 66 前言 本文是学习李笑来的Most Common American Idioms这本书的学习笔记,自用。 Github仓库链接:https://github.com/xiaolai/most-common-american-idioms 使用方法: 直接下载下来(或者clone到本地…...
爬虫技术简介
1、爬虫简介 爬虫(Web crawler)是一种用于自动获取网页内容的程序。它可以通过模拟浏览器访问网页,并从中提取所需的信息,如文本、图片、链接等。爬虫在互联网上进行广泛应用,用于搜索引擎的网页抓取、数据挖掘、信息收集、内容监测等领域。 2、爬虫分类 爬虫的分类有以…...

如何打开Windows10的设备管理器
如何打开Windows10的设备管理器? 01 02...
scala列表
1 不可变 List 说明 (1)List 默认为不可变集合 (2)创建一个 List(数据有顺序,可重复) (3)遍历 List (4)List 增加数据 (5&#…...
c++检查某一文件是否存在
C17及以上版本,检查文件是否存在可以使用filesystem库 如果使用的是C11或C14,标准库并没有直接提供这样的功能。 可以使用平台特定的API,例如在Windows上使用 _access 函数,或在POSIX兼容系统(如Linux和macOS&#x…...
Scala的隐式类,隐式参数和值,隐式对象
1.Scala的隐式类定义语法:implicit class 类名(参数){ } 隐式类中参数只能定义一个,参数中的源类型与目标类型一一对应,只能从一种类型转换成另一种类型,不可以一对多或多对。 //隐式类:implicit class隐式转换函…...
LabVIEW实现HTTP通信
目录 1、HTTP通信原理 2、硬件环境部署 3、云端环境部署 4、HTTP通信函数 5、程序架构 6、前面板设计 7、程序框图设计 本专栏以LabVIEW为开发平台,讲解物联网通信组网原理与开发方法,覆盖RS232、TCP、MQTT、蓝牙、Wi-Fi、NB-IoT等协议。 结合实际案例,展示如何利用LabVIEW和…...
【EXCEL】 获取多列中 不为空的那一个数据
从多个表格筛选出来的上班时间是下表这样的 我要把他们放在同一列,这样方便后续处理,合并列输入下面这个公式即可 日期不加 TEXT() 函数 转日期格式;将得到是一串数字 TEXT(TEXTJOIN(", ",TRUE,B2:F2),&qu…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...

Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...

《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...

无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...

力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
BLEU评分:机器翻译质量评估的黄金标准
BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...