数据结构:链表(2),链表面试题

news2024/11/25 2:23:14

203. 移除链表元素 - 力扣(LeetCode)

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。

示例 1:

输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]

示例 2:

输入:head = [], val = 1
输出:[]

示例 3:

输入:head = [7,7,7,7], val = 7
输出:[]

提示:

  • 列表中的节点数目在范围 [0, 104] 内
  • 1 <= Node.val <= 50
  • 0 <= val <= 50

就是我上一篇博客中提到的removeallkey方法

数据结构:链表(1)_cx努力编程中的博客-CSDN博客


206. 反转链表 - 力扣(LeetCode)

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

示例 1:

输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]

示例 2:

输入:head = [1,2]
输出:[2,1]

示例 3:

输入:head = []
输出:[]

提示:

  • 链表中节点的数目范围是 [0, 5000]
  • -5000 <= Node.val <= 5000

有些人拿到题目第一反应:欸,我可以创一个列表,把这些节点的值拿出来扔到列表里,然后再反向打印不就行了

nonono,马老师曾说过,不要搞耍小聪明。这样虽然列表转了,但是链表还是那个样,题目要求的是链表的反转,没转的话还是过不了~

                                                   👇

第一步:将头节点设为null

第二步:拿第二个节点开始进行头插法

0x81位置改成0x85

第三步:继续拿第三个和最后一个节点前插

这样不就反转了吗🙂

设置curNext 保存当前节点 cur 的下一个节点的引用,防止在修改 curnext 指针后丢失对下一个节点的引用


876. 链表的中间结点 - 力扣(LeetCode)

给你单链表的头结点 head ,请你找出并返回链表的中间结点。

如果有两个中间结点,则返回第二个中间结点。

示例 1:

输入:head = [1,2,3,4,5]
输出:[3,4,5]
解释:链表只有一个中间结点,值为 3 。

示例 2:

输入:head = [1,2,3,4,5,6]
输出:[4,5,6]
解释:该链表有两个中间结点,值分别为 3 和 4 ,返回第二个结点。

提示:

  • 链表的结点数范围是 [1, 100]
  • 1 <= Node.val <= 100

第一种方法:

1.先求整个链表的长度

2.再求长度/2 就能找到中间节点

🆗代码满上 demo

    public ListNode middleNode(){
        int len = size();
        ListNode cur = head;
        for (int i = 0; i < len/2; i++) {
            cur = cur.next;
        }
        return cur;
    }

第二种方法:

我们可以设置两个指针,一个叫fast,一个叫slow,这两个指针在链表上面赛跑,从head开始,fast每次跑两个节点,slow每次跑一个节点

对于偶数个节点的链表来说,当fast跑出链表的时候,slow刚好停在第二个中间节点

此时fast = null

对于奇数个节点的链表来说,fast跑到链表末端时,slow刚好停在中间节点处

 此时 fast.next = null

这种方法是上一种2倍快


链表中倒数第k个结点_牛客题霸_牛客网 (nowcoder.com)

描述

输入一个链表,输出该链表中倒数第k个结点。

示例1

输入:

1,{1,2,3,4,5}

返回值:

{5}

第一步:fast走k-1步

第二步:两个指针一块走,直到fast走到末端

 此时的slow正好处在倒数k=4的位置上

细节问题:

1.k不合法 比如-1,0,超过链表长度

2.第一版写法

  public int size() {
        int count = 0;
        ListNode cur = this.head;
        while (cur != null) {
            count++;
            cur = cur.next;
        }
        return count;
   }
   public ListNode FindKthToTail(ListNode head,int k) {
        if(k <= 0||k>size()){
            return null;
        }
        ListNode slow = head;
        ListNode fast = head;
        while(k-1!=0){
            fast = fast.next;
            k--;
        }
        while(fast.next != null){
            fast = fast.next;
            slow = slow.next;
        }
        return slow;
    }

有没有办法可以不写k>size()呢?因为还得去定义一个新的size函数去记录链表的长度

假设我们的k=4

当我们执行完第一个循环之后,fast直接为空了,后面第二个循环会有空指针异常

那我们直接在第一个循环就把这个k给判断了

改完后的完整代码


21. 合并两个有序链表 - 力扣(LeetCode)

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 

示例 1:

输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]

示例 2:

输入:l1 = [], l2 = []
输出:[]

示例 3:

输入:l1 = [], l2 = [0]
输出:[0]

提示:

  • 两个链表的节点数目范围是 [0, 50]
  • -100 <= Node.val <= 100
  • l1 和 l2 均按 非递减顺序 排列

 假设我们要将这两个链表合并了 

 

我们可以这么做:申请一个虚拟节点,这个节点用来比较两个链表的头谁更小

比如这两个链表,head1的值明显小于head2,所以把head1的位置放到这个节点中

然后head1往后继续遍历

设立一个tempH记录串联好的链表的最后一个节点,两个链表的head相互比较,看看谁的值大tempH就挪到大值的位置,对应的head往后走

代码写上


重要的一道题(有深度有高度) 

链表的回文结构_牛客题霸_牛客网 (nowcoder.com)

描述

对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。

给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。

测试样例:

1->2->2->1
返回:true

1.找到中间位置

和前面一样设置fast和slow指针,fast每次走两步,slow每次走一步,直到fast到末端

2.翻转--> 从中间节点以后开始翻转

curNext = cur.next

cur.next = slow

slow = cur

cur = curNext

3.前->后   后->前

 代码:

public class PalindromeList {
    public boolean chkPalindrome(ListNode head) {
        if (head == null || head.next == null) {
            return true;
        }
        ListNode fast = head;
        ListNode slow = head;
        //1.找到中间位置
        while (fast != null && fast.next != null) {
            fast = fast.next.next;
            slow = slow.next;
        }
        //2.翻转
        ListNode cur = slow.next;
        while (cur != null) {
            ListNode curNext = cur.next;
            cur.next = slow;
            slow = cur;
            cur = curNext;
        }
        //3.从前到后  从后到前
        while (head != slow) {
            //顺序不能换,一定得在值相等的情况下才来判断next
            if (head.val != slow.val) {
                return false;
            }
            if (head.next == slow) {
                return true;
            }
            head = head.next;
            slow = slow.next;
        }
        return true;
    }
}

链表分割_牛客题霸_牛客网 (nowcoder.com)

描述

现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。

假设有这样一段链表

我给一个x=15,那么小于15的就得放在前面,大于15的排在后面

那么5和34就得更改位置

我们可以这么做,设置一个cur遍历整个列表,找到的节点<x的放在左边,>=x的放在右边

分好类再把他们串起来,最后返回头节点就🆗了

因为题目还要求不能改变原来的数据顺序,所以在分类的时候我们要用尾插法

分好类的链表的开头结尾定义四个变量

框架代码

当我们插入第一个节点的时候,bs和be都在同一个位置

所以我们要说明bs = null时,链表正在插入第一个节点

在插入第二个节点的时候

bs.next = be;

be = be.next;

在插>=x的第一个节点的时候

as和ae都指向同一个节点,而且刚好cur遍历到这个节点,所以这俩都=cur

插入后面的节点,as.next = cur; ae = ae.next;(跟前面一样)

注意在最后要提一嘴be.next = as

目前的代码是这样,提交之后系统给我们报了一个空指针异常

因为在执行3,{3,3,3}样例的时候,这三个3>=3所以都被分到右边的链表里面,左边的链表是空的

bs和be这两个就成了空指针了

那我们就判断是不是第一个区间为空,空了就返回as

        if(bs == null){
            //第一个区间没有数据
            return as;
        }

提交上去还有这个异常

这是为什么?我们画个图来看下

看出问题了吗?

问题在于最后一个节点next没有置空,导致返回bs给牛客后台的时候,他的后台直接死循环了,导致他误以为你数组越界了

这种情况属于第一个区间有数据,第二个区间只有一个数据,所以我们要判断第二个区间的as是否为空,空了就给它ae.next = null,空了就无所谓,当预防了

🆗再提交直接拿下

完整代码:

public class Partition {
    public ListNode partition(ListNode pHead, int x) {
        if(pHead == null){
            return null;
        }

        ListNode bs = null;
        ListNode be = null;

        ListNode as = null;
        ListNode ae = null;

        ListNode cur = pHead;

        while(cur!=null){
            if(cur.val < x){
                if(bs == null){
                    bs = cur;
                    be = cur;
                }else{
                    be.next = cur;
                    be = be.next;
                }
            }else{
                if(as == null){
                    as = cur;
                    ae = cur;
                }else{
                    ae.next = cur;
                    ae = ae.next;
                }
            }
            cur = cur.next;
        }
        //串起来
        if(bs == null){
            //第一个区间没有数据
            return as;
        }
        //第一个区间有数据
        be.next = as;
        if(as != null){
            ae.next = null;
        }
        return bs;
    }
}

160. 相交链表 - 力扣(LeetCode)

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。

图示两个链表在节点 c1 开始相交

题目数据 保证 整个链式结构中不存在环。

注意,函数返回结果后,链表必须 保持其原始结构 。

自定义评测:

评测系统 的输入如下(你设计的程序 不适用 此输入):

  • intersectVal - 相交的起始节点的值。如果不存在相交节点,这一值为 0
  • listA - 第一个链表
  • listB - 第二个链表
  • skipA - 在 listA 中(从头节点开始)跳到交叉节点的节点数
  • skipB - 在 listB 中(从头节点开始)跳到交叉节点的节点数

评测系统将根据这些输入创建链式数据结构,并将两个头节点 headA 和 headB 传递给你的程序。如果程序能够正确返回相交节点,那么你的解决方案将被 视作正确答案 。

示例 1:

输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,6,1,8,4,5], skipA = 2, skipB = 3
输出:Intersected at '8'
解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。
从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,6,1,8,4,5]。
在 A 中,相交节点前有 2 个节点;在 B 中,相交节点前有 3 个节点。
— 请注意相交节点的值不为 1,因为在链表 A 和链表 B 之中值为 1 的节点 (A 中第二个节点和 B 中第三个节点) 是不同的节点。换句话说,它们在内存中指向两个不同的位置,而链表 A 和链表 B 中值为 8 的节点 (A 中第三个节点,B 中第四个节点) 在内存中指向相同的位置。

示例 2:

输入:intersectVal = 2, listA = [1,9,1,2,4], listB = [3,2,4], skipA = 3, skipB = 1
输出:Intersected at '2'
解释:相交节点的值为 2 (注意,如果两个链表相交则不能为 0)。
从各自的表头开始算起,链表 A 为 [1,9,1,2,4],链表 B 为 [3,2,4]。
在 A 中,相交节点前有 3 个节点;在 B 中,相交节点前有 1 个节点。

示例 3:

输入:intersectVal = 0, listA = [2,6,4], listB = [1,5], skipA = 3, skipB = 2
输出:null
解释:从各自的表头开始算起,链表 A 为 [2,6,4],链表 B 为 [1,5]。
由于这两个链表不相交,所以 intersectVal 必须为 0,而 skipA 和 skipB 可以是任意值。
这两个链表不相交,因此返回 null 。

 

提示:

  • listA 中节点数目为 m
  • listB 中节点数目为 n
  • 1 <= m, n <= 3 * 104
  • 1 <= Node.val <= 105
  • 0 <= skipA <= m
  • 0 <= skipB <= n
  • 如果 listA 和 listB 没有交点,intersectVal 为 0
  • 如果 listA 和 listB 有交点,intersectVal == listA[skipA] == listB[skipB]

写这道题之前,我们要先明确链表相交的定义

不是说两条链表里面有一个值一样就叫相交,而是要相交之后后半段链表的值都一样才算

具体长这样

上下两个链表各设一个head,遍历,当两个head相遇的时候那个节点就是相遇节点

当然两个链表前半段不一定等长,像这种

解决办法就是让最长的先走len(差值)步(len = abs(len1-len2))

第1步:分别求长度(用两个指针遍历一遍)

第一段代码:初步

写完这个代码我们可以保证

cur1一定指向最长的链表,cur2一定指向最短的链表
len3一定是一个正数

但是这段代码存在一个问题:如果len3>0的话,cur1和cur2没办法进入到判断len3<0的分支里面,cur1和cur2在上面的循环之后走到各自的链表的末端,直接为空了,不方便后面第二次遍历

所以两个循环之后还要强调

4.相遇

第2步:最长的走差值步(第二遍遍历)

        while(len3 != 0){
            cur1 = cur1.next;
            len3--;
        }

第3步:同时走 + 第4步:相遇

        //3.同时走 --> 4.相遇
        while(cur1 != cur2){
            cur1 = cur1.next;
            cur2 = cur2.next;
        }
        return cur1;

整个的代码:

    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        int len1 = 0;
        int len2 = 0;
        ListNode cur1 = headA;
        ListNode cur2 = headB;
        //求长度
        while (cur1 != null) {
            len1++;
            cur1 = cur1.next;
        }
        while (cur2 != null) {
            len2++;
            cur2 = cur2.next;
        }
        cur1 = headA;
        cur2 = headB;
        int len3 = len1-len2;
        if(len3<0){
            //修正一下cur1和cur2的指向
            cur1 = headB;
            cur2 = headA;
            len3 = len2-len1;
        }
        //cur1一定指向最长的链表,cur2一定指向最短的链表
        //len3一定是一个正数
        //2.走差值步
        while(len3 != 0){
            cur1 = cur1.next;
            len3--;
        }
        //3.同时走 --> 4.相遇
        while(cur1 != cur2){
            cur1 = cur1.next;
            cur2 = cur2.next;
        }
        if(cur2 == null){
            return null;
        }
        return cur1;
    }

细节问题:

思考一下,当整段代码走到return这里的时候,是不是就代表他们相遇了?

其实不然,虽然结果是对的,但是这句话本身有漏洞。

试想一个等长平行链表

ha和hb走到末端直接为空了,他们根本就没相遇

那结果为什么是对的?

因为题目要求

刚好这俩走到末尾为空,直接被返回了

 🆗我们加上一句

        if(cur2 == null){
            return null;
        }


 141. 环形链表 - 力扣(LeetCode)

给你一个链表的头节点 head ,判断链表中是否有环。

如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。

如果链表中存在环 ,则返回 true 。 否则,返回 false 。

示例 1:

输入:head = [3,2,0,-4], pos = 1
输出:true
解释:链表中有一个环,其尾部连接到第二个节点。

示例 2:

输入:head = [1,2], pos = 0
输出:true
解释:链表中有一个环,其尾部连接到第一个节点。

示例 3:

输入:head = [1], pos = -1
输出:false
解释:链表中没有环。

提示:

  • 链表中节点的数目范围是 [0, 104]
  • -105 <= Node.val <= 105
  • pos 为 -1 或者链表中的一个 有效索引 。

分析:

如何判断链表里面有环?

我们可以在链表里设置两个指针fast和slow,fast跑得快可以先到达环,在环里面fast一定会跟slow相遇,这相当于我们数学的追及问题

那问题来了,怎么确定fast走几步slow走几步

一般情况我们让fast走两步,slow走1步,这种情况最快相遇(因为最多一个环的长度内就能fast追上),每次走完就判断一次

那fast走3步,slow走1步可以吗?

假设链表有两个节点,这两个节点连成一个环,这种走法就行不通了

如图,fast反复横跳,总是能刚好跳到slow的对面

再注意一个点:一定要判断fast != null 和 fast.next != null

一切准备就绪,直接上代码


什么?这道题太简单了?

我们上升一个难度:求一下进环的入口点和fast与slow的相遇点

142. 环形链表 II - 力扣(LeetCode)

给定一个链表的头节点  head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null

如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。

不允许修改 链表。

示例 1:

输入:head = [3,2,0,-4], pos = 1
输出:返回索引为 1 的链表节点
解释:链表中有一个环,其尾部连接到第二个节点。

示例 2:

输入:head = [1,2], pos = 0
输出:返回索引为 0 的链表节点
解释:链表中有一个环,其尾部连接到第一个节点。

示例 3:

输入:head = [1], pos = -1
输出:返回 null
解释:链表中没有环。

设起始点到入口点的距离为X,入口点到相遇点的距离为Y,环的长度为C

情况1:环够大,fast只比slow走多一圈

那fast走的路程为 X+C+(C-Y)

slow走的路程为 X+(C-Y)

fast速度是slow的2倍,那么走的路程也是2倍关系

列出方程

X + C + ( C - Y )  = 2 * [ X + ( C - Y ) ]

求解方程(化简结果)

X = Y

情况2:环太小了,fast在里面套圈了,比slow多走了n圈

那fast走的路程为 X+N*C+(C-Y)

slow走的路程为 X+(C-Y)

X + N * C + ( C - Y )  = 2 * [ X + ( C - Y ) ]

求解方程

其实无论n多大,fast最终都会跟slow相遇

简单一点,不妨设N=1,直接X = Y

既然X=Y了,那我们何不让slow从起始点走,让fast从相遇点走

让fast速度降到和slow一样,同时同速走就能同时到达入口点

其实我们只要在上一个代码的基础上加上后半部分的入口点相遇就行了

整个的代码:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1097804.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Web自动化测试-PO模式实战详解

PO模式 Page Object(简称PO)模式&#xff0c;是Selenium实战中最为流行&#xff0c;并且是自动化测试中最为熟悉和推崇的一种设计模式。在设计自动化测试时&#xff0c;把页面元素和元素的操作方法按照页面抽象出来&#xff0c;分离成一定的对象&#xff0c;然后再进行组织。 …

NI GPIB-140A 使用缓冲传输技术 边缘人工智能

NI GPIB-140A 使用缓冲传输技术 边缘人工智能 GPIB总线扩展器—GPI b-140 a可以将GPIB系统的电缆长度延长一千米&#xff0c;而不会影响GPIB的完整性&#xff0c;也不需要修改软件。该配件使用缓冲传输技术&#xff0c;以高达1.1 Mb/s (IEEE 488.1)或2.8 Mb/s (HS488)的速率传…

初识C++入门(1)

为什么会衍生出C&#xff1f; C语言是结构化和模块化的语言&#xff0c;适合处理较小规模的程序。对于复杂的问题&#xff0c;规模较大的程序&#xff0c;需要高度的抽象和建模时&#xff0c;C语言则不合适。为了解决软件危机&#xff0c;20世纪80年代&#xff0c;计算机界提出…

安科瑞预付费系统在某大型连锁农贸市场的设计应用

安科瑞 崔丽洁 摘要 本远程预付费管理系统采用智能远程预付费电表&#xff08;DTSY1352-NK/DDSY1352-NK系列&#xff09;&#xff0c;NB智能远传水表&#xff0c;采集各商户实时用电量、用电量总数&#xff0c;通过平台定时结算&#xff0c;结算账户余额&#xff0c;从而进行智…

资深IC工程师的快速学习指南《Verilog语言知识学习快速基础学习》

Verilog语言是一种硬件描述语言&#xff08;HDL&#xff09;&#xff0c;广泛用于数字集成电路&#xff08;IC&#xff09;设计和硬件描述。对于IC行业的初学者来说&#xff0c;掌握Verilog语言是非常重要的&#xff0c;因为它是设计和仿真IC电路的基础。之前也分享过很多Veril…

调用Open3d接口报错:E0282 全局范围没有 “localeconv“及E0070 不允许使用不完整的类型

Open3D已经编译好&#xff0c;在新建一个C工程测试接口的时候出现了以下报错 严重性 代码 说明 项目 文件 行 禁止显示状态 错误(活动) E0070 不允许使用不完整的类型 EnvTest F:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\incl…

如何使PoE交换机连接稳定?

随着PoweroverEthernet&#xff08;PoE&#xff09;技术的不断发展&#xff0c;PoE交换机已经处于非常成熟的阶段。然而&#xff0c;由于目前监控市场受到成本压力的影响&#xff0c;一些采用PoE供电的项目可能会选用品质较低的PoE交换机或线材&#xff0c;或者设计方案本身不合…

MQTT整合

MQTT整合 MQTT服务器软件筛选MQTT服务器软件mosquitto下载修改mosquitto配置,并启动mosquitto服务利用mosquitto工具测试订阅与发布可视化MQTT客户端工具MQTTX使用SpringBoot整合MQTT1.2.3.4.5.6.MQTT服务器软件筛选 MQ遥测传输(MQTT)是轻量级基于代理的发布/订阅的消息传输…

如何正确维护实验室超声波清洗器?

实验室一直被视为一个严谨而严肃的场所&#xff0c;实验应遵循一定的步骤&#xff0c;使用的设备也经历了详细的选择&#xff0c;如实验室超声波清洗机&#xff0c;其特点远强于一般类型的清洗机。专门负责采购的实验室人员一般对优质服务的实验室超声波清洗机印象深刻&#xf…

电力物联网关智能通讯管理机-安科瑞黄安南

众所周知&#xff0c;网关应用于各种行业的终端设备的数据采集与数据分析&#xff0c;然后去实现设备的监测、控制、计算&#xff0c;为系统与设备之间建立通讯联系&#xff0c;达到双向的数据通讯。 网关可以实时监测并及时发现异常数据&#xff0c;同时自身根据用户规则进行…

安科瑞ASCB1智能漏电断路器监测漏电和漏电保护

安科瑞虞佳豪壹捌柒陆壹伍玖玖零玖叁 ASCB1系列一体式智慧空开&#xff0c;空开自带4G、WIFI、以太网等多种通讯方式&#xff0c;可选本地显示&#xff0c;集成保护、控制、计量等多种功能。广泛用于老旧社区改造、九小场所、学校宿舍、公寓、铁塔基站、路灯、充电桩等。

文献阅读快速法-ChatPDF

如题&#xff0c;直接提供给大家一款能够快速阅读文档的好工具——iTextMaster。 iTextMaster是一款免费的pdf阅读浏览器&#xff0c;上传pdf文档后等待几秒钟&#xff0c;AI就会自动反馈给用户关于文档的摘要总结。十分的方便且实用。 ChatPDF为您提供简洁的文档摘要。对于那…

数据库管理-第110期 Oracle Exadata 01(20231016)

数据库管理-第110期 Oracle Exadata 01&#xff08;202301016&#xff09; 今天开始一个新的系列&#xff0c;讲讲Oracle Exadata&#xff0c;将用若干期并关联之前和一体机相关的一些内容对Exadata进行讲解。本期是Oracle硬件的介绍。 1. Oracle Hardware and Engineered Sy…

STM32 看门狗(WDG)

STM32 看门狗&#xff08;WDG&#xff09; WDG简介 WDG&#xff08;Watchdog&#xff09;看门狗 在程序卡死的情况下&#xff0c;自动帮我们复位 简单来说就是程序运行的一个保障措施&#xff0c;我们得在程序中定期地进行喂狗&#xff0c;如果程序出问题卡死了&#xff0c;没…

存在已打开的MicrosoftEdge浏览器,无法执行安装

存在问题&#xff1a;UiBot Creator 安装Chrome扩展时&#xff0c;存在已打开的MicrosoftEdge浏览器&#xff0c;无法执行安装。 解决办法&#xff1a; 打开MicrosoftEdge浏览器&#xff0c;然后在浏览器页面右上角打开“…”图标 第二步&#xff0c;打开“…”图标之后&…

多关键词高亮显示

引入关键词文件&#xff0c;符合有条件的背景色高亮显示&#xff0c;也可取消。 <div id"testHtml"><p>写入的文本</p><p>关键词</p></div> var str 多个关键词&#xff0c;关键词文件&#xff0c;关键词 var strL str.replac…

批量修改视频尺寸:简单易用的视频剪辑软件教程

如果你需要批量修改视频尺寸&#xff0c;同时保持高质量的画质&#xff0c;那么“固乔剪辑助手”这款软件是你的不二之选。下面就是如何使用这款软件进行批量修改视频尺寸的详细步骤。 1. 首先&#xff0c;你需要在浏览器中进入“固乔科技”的官网&#xff0c;然后下载并安装“…

美客多、亚马逊卖家如何运用自养账号进行有效测评?

到了10月&#xff0c;卖家朋友们都在忙着准备Q4旺季吧&#xff01; 首先&#xff0c;祝愿所有看到这条推文的卖家朋友&#xff0c;今年旺季都能爆单&#xff0c;赚得盆满钵满&#xff01; 测评是珑哥常谈&#xff0c;一直备受关注&#xff0c;不论是新老卖家都是一个逃不开的…

用低代码打造CRM系统 实现客户个性化管理

CRM管理思想伴随着互联网和电子商务的大潮进入中国&#xff0c;对企业经营管理理念产生了巨大的冲击&#xff0c;使中国企业逐步树立起与世界接轨的客户关系管理理念。中国CRM市场的萌芽阶段大约始于2000年&#xff0c;而到2010年前后&#xff0c;中国市场上争相涌现了一大批CR…

什么是美体SDK?美摄美颜美体SDK对接开发指南

在当今的数字世界中&#xff0c;人们对自我表达和形象展示的需求越来越高。美体SDK应运而生&#xff0c;为用户提供了一种全新的美颜美体体验&#xff0c;让每一个人都能享受到个性化的美丽与自信。 一、美体SDK的特点 轻量级&#xff1a;美体SDK体积小巧&#xff0c;不会对用…