[Leetcode] 合并两个有序数组、链表

news2024/12/30 3:24:21

1.合并两个有序数组

原地合并数组,即不使用额外的空间 --> 使用三个指针,从尾部往前处理

题目链接:https://leetcode.cn/problems/merge-sorted-array/

nums1 总长度 m+n,自身长度m;nums2 自身长度n, 使用三个指针,分别执行三个长度的最后

p1 初始指向 nums1有效长度的尾部,p3初始指向nums1的尾部

p2 初始指向 nums2的尾部

输入和最终的数组都是非递减排序,比较 p1 和 p2 所指元素大小,较大者的存到 p3 所指位置,然后指向较大者的指针 和 p3 往前移动一位

如果 p1 或 p2 有一个指针走到了数组的开头,该指针停止移动。之后省去比较步骤,继续把没走完的指针所指值依次存放到 p3 所指位置,同时二指针继续往前移动

Python3

class Solution:
    def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
        """
        Do not return anything, modify nums1 in-place instead.
        """

        # 使用三个指针,分别执行三个长度的最后
        p1_tail, p2_tail = m - 1, n - 1
        tail = m + n - 1

        # p1 和 p2 分别遍历完各自的数组,循环才结束
        while p1_tail >= 0 or p2_tail >= 0:

            # 如果p1走到头
            if p1_tail == -1:
                nums1[tail] = nums2[p2_tail]
                p2_tail -= 1
            
            # 如果p2走到头
            elif p2_tail == -1:
                nums1[tail] = nums1[p1_tail]
                p1_tail -= 1

            # 如果p1位置的值大于p2位置的值,赋值、移动p1
            elif nums1[p1_tail] > nums2[p2_tail]:
                nums1[tail] = nums1[p1_tail]
                p1_tail -= 1

            # 如果p2位置的值大于p1位置的值,赋值、移动p2
            else:
                nums1[tail] = nums2[p2_tail]
                p2_tail -= 1
            
            # 上述选择分支已给 p3 所值位置赋值,此处往前移动 p3
            tail -= 1

2.合并两个有序列表

方法一:递归

方法二:虚拟一个起始节点 + 迭代

题目链接:https://leetcode.cn/problems/merge-two-sorted-lists/

方法一:虚拟一个prehead节点

从两个链表中不断找到较小者链上,最后返回 prehead.next

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

class Solution:
    def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]:
        if not list1:
            return list2
        elif not list2:
            return list1
        else:
            prehead = ListNode(-1)
            pre = prehead
            while list1 and list2:
                if list1.val < list2.val:
                    pre.next = list1
                    list1 = list1.next
                else:
                    pre.next = list2
                    list2 = list2.next
                pre = pre.next
            pre.next = list1 if list1 is not None else list2
            return prehead.next

方法二:递归

把问题转换为找到 list1 和 list2 头节点的较小者(将其指向后续的链表x),从 list1 或 list2 中抽离该节点,解决新链表和另一个链表的相同问题(假设得到链表 x)

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

class Solution:
    def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]:
        if not list1:
            return list2
        elif not list2:
            return list1
        else:
            if list1.val < list2.val:
                list1.next = self.mergeTwoLists(list1.next,list2)
                return list1
            else:
                list2.next = self.mergeTwoLists(list1,list2.next)
                return list2

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

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

相关文章

SSRF渗透与攻防(一)

目录 前言 SSRF是什么 危害&#xff08;利用方式): SSRF漏洞原理&#xff1a; CURL协议&#xff1a; SSRF常见场景 社会化分享功能&#xff1a; 如何发现SSRF漏洞 工具利用&#xff1a; 如何防御SSRF漏洞 前言 SSRF(Server-Side Request Forgery:服务器端请求伪造) 是…

rocketmq 实战问题汇总

rocketmq 实战过程会遇到这样或者那样的问题&#xff0c;今天我们专门抽出一篇文章来分析一下汇总一下&#xff0c;避免以后踩同样的坑&#xff1a; 1、找不到JDK的问题&#xff1a; 综合分析&#xff0c;是因为JDK安装的目录有空格导致的&#xff1a;Program Files 两个单词之…

电子招标采购系统源码—企业战略布局下的采购寻源

​ 智慧寻源 多策略、多场景寻源&#xff0c;多种看板让寻源过程全程可监控&#xff0c;根据不同采购场景&#xff0c;采取不同寻源策略&#xff0c; 实现采购寻源线上化管控&#xff1b;同时支持公域和私域寻源。 询价比价 全程线上询比价&#xff0c;信息公开透明&#xff0…

CANoe—基于DoIP通过CAPL实现与ECU通信测试

如下连接是在CANoe中基于DoIP通过加载诊断数据库实现CANoe与待测ECU诊断通信: CANoe链接 本文继续此话题,通过一个简单的CAPL Demo,实现CANoe与ECU进行DoIP通信。 首先在CANoe新建Ethernet工程: 在CANoe “Simulation Setup”中新建CAPL Test Module: 在此例中采用CANo…

DHCP原理和实验

目录 DHCP基本认识和原理 场景一、同网段DHCP 场景二、不同段DHCP&#xff08;中继DHCP&#xff09; DHCP基本认识和原理 DHCP&#xff08;Dynamic Host Configuration Protocol动态主机协议&#xff09;。 作用&#xff1a;为局域网络中主机动态分发地址&#xff0c;以及…

C#里使用ExcelDataReader读取EXCEL文件的简单方法

C#里使用ExcelDataReader读取EXCEL文件的简单方法 读取EXCEL文件是比较常见的需求,所以在C#里也会经常遇到。 比如客户需要保存的条码数据,他们可以使用EXCEL来扫码进去,并且进行修改和核验, 然后软件就需要读取这些EXCEL文件,并且从这里得到所需要的条码。 要从EXCEL里…

Android 查看隐私权限方法调用者集合

背景 辛辛苦苦迭代完当前版本&#xff0c;准备推送 App 到应用市场上架&#xff0c;却收到拒审通知&#xff1a;App隐私合规上架护航版检测报告&#xff0c; 报告内容&#xff1a; 场景2:APP以隐私政策弹窗的形式向用户明示收集使用规则&#xff0c;未经用户同意&#xff0c;…

页面崩溃了!记录一次测试中出现的前端内存溢出现象

前情回顾 前几天在一次web应用测试过程中&#xff0c;前端发起了向后端接口的查询请求&#xff0c;由于后端响应较慢&#xff0c;前端一直处于等待响应返回状态。在几分钟后&#xff0c;突然页面出现让人惊悚的“噢噢&#xff0c;页面崩溃了”几个大字。 看到这几个字的一瞬间…

基于GitLab构建企业级CICD-Gitlab-Runner

背景 在过往企业开发中&#xff0c;大部分企业从开发到测试&#xff0c;到部署目前还是手工进行在一些某些中大型企业中&#xff0c;目前构建及部署还是直接使用二进制包部署&#xff0c;或直接单机运行在某些场合下&#xff0c;仓库中代码的编译需要硬件支持&#xff0c;致使…

SSM框架学习记录-Maven_day01

1.分模块开发 将原始模块按照功能拆分成若干个子模块&#xff0c;方便模块间的相互调用&#xff0c;接口共享&#xff1a;比如有订单和商品两个模块&#xff0c;它们都需要使用到商品的模型类&#xff0c;如果在这两个模块中都写模型类&#xff0c;就会出现重复代码&#xff0c…

Doris部分列更新在广告行业应用

背景&#xff1a;业务需要在不同的时间点对同一个session_id上的广告行为&#xff08;展示、点击、转换等&#xff09;数据的更新。 基于HBase归因 更新原理&#xff1a;以session_id为Key在HBase中写入数据&#xff0c;数据更新是先点查到历史数据&#xff0c;补齐当前数据后…

风已起,待云涌---多维度理解云安全

Fix the Unknown,Before You Know it. 新时代大门开启的时候&#xff0c;蜂拥而上的大都是勇士&#xff0c;风已起&#xff0c;待云涌&#xff01; 1.云安全&#xff1a; 未来安全的能力将成为计算、存储、网络之外的第四大基础设施&#xff0c;并全部融入到云基础设施中&…

Python爬虫入门 ~ selenium访问元素信息与交互基本使用

访问元素信息 前面我们成功定位到了页面的标签元素&#xff0c;那接下来就该轮到获取元素的信息了&#xff0c;常用的函数有以下几种: get_attributetexttag_name 前置准备 from selenium import webdriver from selenium.webdriver.chrome.service import Service from sel…

【Django项目开发】用户认证功能开发(四)

一、JWT Token配置 1、下载djangorestframework-jwt pip install djangorestframework-jwt2、settings.py指定使用的认证类JSONWebTokenAuthentication REST_FRAMEWORK {# 指定使用的认证类# a、在全局指定默认的认证类&#xff08;认证方式&#xff09;DEFAULT_AUTHENTICA…

企业金融App评测系列——微众银行以App构筑企业金融服务新生态,成为企业的随身数字银行

易观分析&#xff1a;近年来&#xff0c;疫情驱动小微企业线上化需求不断提升&#xff0c;经营面临的财力、人力、信息获取的紧迫性进一步提升。为更好发展普惠小微金融的商业银行对公服务&#xff0c;正聚焦更好满足小微企业的数字化需求&#xff0c;加快打造企业手机银行等移…

mybatis xml接收日期格式参数

实现方式一&#xff1a; mapper List<AsLLjgcfVO> selectjgcf(Param("rq")Date rq)mapper.xml <select id"selectjgcf" parameterType"string" resultType"com.bysen.mes.domain.VO.AsLLjgcfVO"> where ${rq} between …

使用openEuler系统 搭建Nginx服务器

文章目录1 Nginx服务器1.1 概述1.2 安装1.3 管理nginx1.3.1 概述1.3.2 前提条件1.3.3 启动服务1.3.4 停止服务1.3.5 重启服务1.3.6 验证服务状态1.4 配置文件说明1.5 管理模块1.5.1 概述1.5.2 加载模块1.6 验证web服务是否搭建成功1 Nginx服务器 1.1 概述 Nginx 是一款轻量级…

【Vue】course_3

13.vue3过渡效果 学习&#xff1a;Vue3过渡效果开发&#xff08;内置组件 、内置组件 &#xff09; Vue 提供了两个内置组件&#xff0c;可以帮助你制作基于状态变化的过渡和动画&#xff1a; <Transition> 会在一个元素或组件进入和离开 DOM 时应用动画。本章节会介绍…

算法设计与分析

目录 7-1 汉诺塔问题 7-2 逆序对 7-3 前t个组合结果 7-4 跳马问题 7-5 加油站之最小加油次数 7-6 删数问题 7-1 因子分解 7-2 英雄出场王 7-3 最佳组队问题 7-4 回文串的切割 7-5 和谐宿舍 7-6 h0221.激光炸弹 7-1 小H分糖果 7-2 子集和问题 7-3 数列游戏 7-4 叠…

CentOS8 Kibana8.x 安装遇到的问题解决

起因 在安装完相同版本的Elasticsearch和Kibana后&#xff0c;Elaticsearch运行成功并可以正常使用&#xff0c;Kibana也正常启动&#xff0c;但是在访问时会出现以下错误及提示&#xff1a; 浏览器访问提示&#xff1a;Kibana server is not ready yet.&#xff08;服务器尚…