【Leetcode 剑指Offer】第 12 天 双指针(简单)

news/2024/7/5 2:24:58

文章目录

    • 剑指 Offer 25. 合并两个排序的链表
      • Python 三元表达式
      • 链表常用辅助 cur &&dum
    • 剑指 Offer 52. 两个链表的第一个公共节点

剑指 Offer 25. 合并两个排序的链表

题:输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。

示例1:

输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
        # dum是虚拟头节点,cur指向dum,对他进行操作
        cur=dum=ListNode(0)
        while l1 and l2:
            if l1.val<l2.val:
                cur.next=l1
                l1=l1.next
            else:
                cur.next=l2
                l2=l2.next
            cur=cur.next#cur也要往后移动,别忘了,不然一直在一个点在操作了
        cur.next=l1 if l1 else l2
        return dum.next

复杂度分析:
时间复杂度 O(M+N) : M,N 分别为链表的长度,合并操作需遍历两链表。
空间复杂度 O(1) : 节点引用 dum , cur 使用常数大小的额外空间。

Python 三元表达式

写法 A if x else B ,代表当 x=True时执行 A,否则执行 B

链表常用辅助 cur &&dum

很多题都用到这两个辅助。dum存储一个链表,cur用来指向dum对其进行操作。
返回cur.next—是一个值
返回dum.next—是一个链表【因为结构体定义,存储了后续节点的地址】

剑指 Offer 52. 两个链表的第一个公共节点

在这里插入图片描述

这题双指针非常优雅,看题解有图示。
在这里插入图片描述

class Solution:
    def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:
        a,b=headA,headB
        while a!=b:
            a=a.next if a else headB
            b=b.next if b else headA
        return a   

复杂度分析:
时间复杂度 O(a+b) : 最差情况下(即 ∣a−b∣=1, c=0),此时需遍历 a+b个节点。
空间复杂度 O(1): 节点指针 A , B 使用常数大小的额外空间。

总感觉题目的示例是有误的,示例1中为什么是8,不是1?如果因为skipA = 2, skipB = 3的条件决定,在代码输入中没有这俩条件啊??


http://lihuaxi.xjx100.cn/news/965892.html

相关文章

神经网络之反向传播算法(自适应梯度算法Adagrad)

文章目录自适应梯度算法&#xff08;Adagrad&#xff09;1、算法原理2、算法实现2.1 训练过程2.2 测试过程及结果3、参考源码及数据集自适应梯度算法&#xff08;Adagrad&#xff09; 自适应梯度算法&#xff08;Adaptive gradient algorithm&#xff0c;Adagrad&#xff09;与…

【SpringCloud】SpringCloud教程之Nacos实战(1)

目录Nacos是什么&#xff1f;一.Nacos下载二.安装Nacos三.Nacos原理四.Nacos快速入门五.Nacos服务多级存储模式六.Nacos根据集群设置负载均衡1.根据同集群优先访问2.根据权重配置负载均衡七.Nacos的环境隔离八.Nacos和Eureka的区别前提&#xff1a;以订单服务和用户服务为例&am…

XC7K160T-1FBG484I、XC7A100T-2CSG324I FPGA可编程门阵列 PDF规格书

1、XC7K160T-1FBG484I说明&#xff1a;Kintex-7 FPGA有-3、-2、-1、-1L和-2L速度等级&#xff0c;其中-3具有最高的性能。-2L器件被筛选为较低的最大静态功率&#xff0c;并且可以在较低的核心电压下运行&#xff0c;以获得比-2器件更低的动态功率。-2L工业(I)温度器件仅在VCCI…

项目设计原则

单一设计原则 做过管理系统项目的同学肯定都接触过用户、机构、角色管理这些模块&#xff0c;实现方式都是基于RBAC模型&#xff08;Role-Based Access Control&#xff0c;基于角色的访问控制&#xff0c;通过分配和取消角色来完成用户权限的授予和取消&#xff0c;使动作主体…

【C/C++ 数据结构】-八大排序之 归并排序其它排序

作者&#xff1a;学Java的冬瓜 博客主页&#xff1a;☀冬瓜的主页&#x1f319; 专栏&#xff1a;【C/C数据结构与算法】 分享&#xff1a;本王在此&#xff0c;狼狈为奸者&#xff0c;谋权篡位者&#xff0c;倒行逆施者&#xff0c;都得死&#xff01; ——岐王李茂贞《画江湖…

微软正式推出用于 WSL 的 D3D12 GPU 视频加速

导读在允许 WSL 使用 OpenGL、OpenCL 和 Vulkan API 进行 GPU 加速之后&#xff0c;微软又正式发布了针对 Linux 的 Windows 子系统 (WSL2) 的 Direct3D 12 GPU 视频加速支持。 在允许 WSL 使用 OpenGL、OpenCL 和 Vulkan API 进行 GPU 加速之后&#xff0c;微软又正式发布了针…

1.2+1.3 GCC

安装gcc g sudo apt install gcc g查看gcc版本 gcc -v gcc -version g -v g -versionxshell快捷键&#xff1a;ctrlL清空命令行 编译测试 在/home/ssp/Linux/lession02目录下创建一个test.c文件 touch test.c使用vs code远程连接到Ubuntu&#xff0c;写c代码更方便 #inclu…

GrabCut算法、物体显著性检测

图割GraphCus算法。利用颜色、纹理等信息对GraphCut进行改进&#xff0c;形成效果更好的GrabCut算法。 对图像的目标物体和背景建立一个K维的全协方差高斯混合模型。 其中&#xff0c;单高斯模型的概率密度函数用公式表示为&#xff1a; 高斯混合模型可表示为n个单高斯模型的概…