代码随想录训练营第四天打卡|24.两两交换链表中的结点 19.删除链表的倒数第N个节点 面试题 02.07.链表相交 142.环形链表

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、24.两两交换链表中的结点

题目:给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
代码:

var swapPairs = function(head) {
    if (head === null|| head.next === null) {
        return head;
    }
    const newHead = head.next;
    head.next = swapPairs(newHead.next);
    newHead.next = head;
    return newHead;
};

二、19.删除链表的倒数第N个节点

题目:给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
代码:

var removeNthFromEnd = function (head, n) {
    let dummy = new ListNode();
    dummy.next = head;
    let n1 = dummy;
    let n2 = dummy;
    for (let i = 0; i <= n; i++) {//n2移动n+1次
        n2 = n2.next;
    }
    while (n2 !== null) {//同时移动n1,n2
        n1 = n1.next;
        n2 = n2.next;
    }
    n1.next = n1.next.next;//删除元素
    return dummy.next;
};

三、面试题 02.07.链表相交

题目:给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null
代码:

var getIntersectionNode = function(headA, headB) {
    //这样写的问题是当a链表和b链表的不同位置相同则不能检测到 例如a链表的第二个结点和b链表的第三个结点相同
    // while(headA.next&&headB.next){
    //     if(headA == headB){
    //         return headA
    //     }else{
    //         headA = headA.next
    //         headB = headB.next
    //     }
    // }
    //遍历a加入哈希集合
    const visited = new Set();
    let temp = headA;
    while (temp !== null) {
        visited.add(temp);
        temp = temp.next;
    }
    //遍历b找到第一个a中也存在的值并返回
    temp = headB;
    while (temp !== null) {
        if (visited.has(temp)) {
            return temp;
        }
        temp = temp.next;
    }
    return null;
};

四、142.环形链表

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

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

不允许修改 链表。

链接:https://leetcode.cn/problems/linked-list-cycle-ii

var detectCycle = function(head) {
    const visited = new Set();
    while (head !== null) {
        if (visited.has(head)) {
            return head;
        }
        visited.add(head);
        head = head.next;
    }
    return null;
};
YOLO(You Only Look Once)DETR(Detected Transformers)都是计算机视觉领域中的目标检测算法,它们各自有其独特的优点缺点。 YOLO(You Only Look Once): **优点:** 1. **速度较快**:YOLO由于其一次前向传播就完成检测,适合实时应用,如自动驾驶、视频监控等对速度有较高要求的场景。 2. **简单高效**:YOLO模型结构相对简单,预测速度非常快。 3. **输出直接**:YOLO的输出是直接定位分类,不需要额外的非极大值抑制步骤,减少了计算量。 **缺点:** 1. **精度与复杂度之间的权衡**:相比于其他精确度更高的方法(如R-CNN系列),YOLO在精度上可能略逊一筹,尤其是在较小的目标检测上。 2. **边界框问题**:对于小目标靠近的物体,边界框可能会有所重叠,影响准确度。 DETR(Detected Transformers): **优点:** 1. **基于Transformer**:DETR使用了Transformer架构,能够理解处理图像全局上下文信息,从而提升检测的精度。 2. **端到端学习**:DETR是一体化模型,不需要预定义的区域提议,直接从头开始学习,简化了整个检测流程。 3. **可解释性强**:由于没有复杂的后处理步骤,DETR的决策过程更容易理解解释。 **缺点:** 1. **计算资源消耗大**:Transformer的自注意力机制使得DETR的计算成本较高,不适合实时应用或资源有限的环境。 2. **训练时间长**:由于Transformer的训练迭代次数较多,且依赖于大规模标注数据进行训练,所以训练速度较慢。 3. **内存需求**:Transformer对内存的需求较大,可能导致内存溢出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值