单链表常见面试题 —— 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…...
VBA API 概述 | 宏编程
注:本文为 “VBA API 概述 | 宏编程 | 执行速度慢” 相关文章合辑。 VBA API 详解 Office 二次开发于 2020-12-17 22:27:10 发布 Office 版本变动 在 Office 2010 之前,微软仅提供 32-bit 版本的 Office。而自 Office 2010 起,出现了 32-b…...
pythonOpenCV篇:0基础带你python入门之常用函数
① 二值化函数 功能:将图像转换为二值图像(黑白图像),将像素值分为两种类别:前景(白)和背景(黑)。函数:cv2.threshold()参数: src:输…...
第十七届山东省职业院校技能大赛 中职组“网络安全”赛项资源任务书样题③
第十七届山东省职业院校技能大赛 中职组“网络安全”赛项资源任务书样题③ 模块A 基础设施设置与安全加固(200分)A-1 登录安全加固(Windows, Linux)A-2 Nginx安全策略(Linux)A-3日志监控(Windows)A-4中间件…...
【每日一题 基础题】验证回文串
LCR 018. 验证回文串 验证回文串 给定一个字符串 s ,验证 s 是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。 本题中,将空字符串定义为有效的回文串 。 验证回文串 LCR 018. 验证回文串方法一:**筛选 判断…...
【Hadoop】-- hadoop3.x default port
Hadoop 3.x 修改了一些以前常用的默认端口,完整的默认端口列表,可点击下面配置文件获取信息: core-default.xmlhdfs-default.xmlhdfs-rbf-default.xmlyarn-default.xml...
SQL Server:只有MDF文件,如何附加数据库
第一步:先新建一个同名数据库,然后停止sql服务,删除新建数据库.ldf文件。 第二步:将要附加的数据库的.mdf文件覆盖刚新建的.mdf文件,并重启sql服务。 第三步:这时数据库DATA目录下只有一个.mdf文件…...
深入理解代理模式(Proxy):静态代理、动态代理与AOP
目录 1. 代理模式简介2. 静态代理3. 动态代理 3.1 JDK动态代理3.2 CGLIB动态代理 4. 面向切面编程(AOP)5. 实战示例6. 总结与最佳实践 1. 代理模式简介 代理模式是一种结构型设计模式,它允许我们提供一个代理来控制对其他对象的访问。代理模式在不改变原始类代码…...
项目中如何选择JVM垃圾回收器?
大家好,我是锋哥。今天分享关于【项目中如何选择JVM垃圾回收器?】面试题。希望对大家有帮助; 项目中如何选择JVM垃圾回收器? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在一个项目中选择合适的 JVM 垃圾回收器 (Garbage Collector, GC…...
如何借助5G网关实现油罐车安全在线监测
油罐车是常见的特种运输车辆,用以运送各种汽油、柴油、原油等油品,运输危险系数大,而且由于油罐车需要经常行驶在城区道路,为城市各个加油站点、企业工厂运输补充所需油料,因此也是危化品运输车辆的重点监测和管控对象…...
Edge SCDN的独特优势有哪些?
强大的边缘计算能力 Edge SCDN(边缘安全加速)是酷盾安全推出的边缘集分布式 DDoS 防护、CC 防护、WAF 防护、BOT 行为分析为一体的安全加速解决方案。通过边缘缓存技术,智能调度使用户就近获取所需内容,为用户提供稳定快速的访问…...
自己做的网站怎么接入银联支付/童程童美少儿编程怎样收费
作者:瀚高PG实验室 (Highgo PG Lab)- 海无涯 pg_locks视图是对查询无响应时需要查询的重要视图,其各字段机器含义如下: 名字类型引用描述locktypetext可锁定对象的类型: relation, extend, page, tuple, t…...
世界政务网站绩效评估指标体系建设/百度点击软件名风
编辑导读:随着数字化进程的发展,越来越多的企业依赖于数据,数据分析的地位也越来越重要。通过数据分析,可以提取到有用的信息并进行相对应的动作。市面上对于数据分析师的需求也越来越大,本文作者分析了自己是如何选择…...
wordpress增加购物车/世界杯积分榜排名
匿名函数和闭包 学习要点: 1.匿名函数 2.闭包 匿名函数就是没有名字的函数,闭包是可访问一个函数作用域里变量的函数。 一.匿名函数 //普通函数 function box() { //函数名是box return Lee; } //匿名函数 function () { //匿名函数ÿ…...
网站推广中h1标签的重要性/东莞seo优化案例
本文讲的是傻瓜,社区才是关键啊!,【编者的话】本文是Docker用户命名空间功能实现作者写的一篇关于开源社区的文章。他的观点是一切的成功都离不开社区的鼎力支持,所以当你加入一个开源项目的时候,尽量去真正的参与其中,…...
建筑培训机构排名前十/seow
本季Fringe Season 5 第五季(2012)看点:Walter 用琥珀将Olivia、Peter、Astrid和自己封存,以便在2036年的未来世界实现自己抵抗观察者的完美计划,“解冻”后的Olivia与Peter终于见到了失踪许久的女儿Henrietta,但英勇的Etta不久便…...
中国免费建站网/友情链接查询
HBase四类主要操作 put:增加一行,修改一行; get:获取指定行的所有信息,获取指定行和指定列族的所有column,获取指定column的几个版本等; scan:获取指定行键范围的行; …...