合并两个有序数组-python

Ollama最新快速上手指南:从安装到精通本地AI模型部署 想让Ollama跑你的"私房模型"?三种主流格式全支持,总有一款适合你!GGUF格式(推荐新手首选)创建Modelfile文件:执行创建命令:运行你的专属模型:PyTorch/Safetensors格式(适合进阶玩家)先用库测试模型能否正常加载确保模型结构完整后再导入Ollama官方文档有详细转换指南专业小贴士GGUF格式最轻量,PyTorch最灵活,Safetensors最安全遇到问题?试试用llama.cpp进行格式转换7B参数模型推荐使用q4_0量化级别想让AI用马里奥。 阅读详情

问题描述

leetCode第88题 合并两个有序数组
给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。
请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。
注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。

示例1:

输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
输出:[1,2,2,3,5,6]
解释:需要合并 [1,2,3] 和 [2,5,6] 。
合并结果是 [1,2,2,3,5,6] ,其中斜体加粗标注的为 nums1 中的元素。

示例2:

输入:nums1 = [1], m = 1, nums2 = [], n = 0
输出:[1]
解释:需要合并 [1] 和 [] 。
合并结果是 [1] 。

示例3:

输入:nums1 = [0], m = 0, nums2 = [1], n = 1
输出:[1]
解释:需要合并的数组是 [] 和 [1] 。
合并结果是 [1] 。
注意,因为 m = 0 ,所以 nums1 中没有元素。nums1 中仅存的 0 仅仅是为了确保合并结果可以顺利存放到 nums1 中。

提示:

nums1.length == m + n
nums2.length == n
0 <= m, n <= 200
1 <= m + n <= 200
-109 <= nums1[i], nums2[j] <= 109

进阶:

你可以设计实现一个时间复杂度为 O(m + n) 的算法解决此问题吗?

碰到的问题

问题并不复杂,nums1的总长度为m+n,前m个是nums的元素,后n个元素是0,只要将后n个元素改为nums2的元素,再对nums1进行排序即可。
但我想对我碰到的问题进行一个分享
在这里插入图片描述

## 错误代码 第一版
class Solution:
    def merge(self, nums1: [int], m: int, nums2: [int], n: int) -> None:
        """
        Do not return anything, modify nums1 in-place instead.
        """
        nums1 = nums1[:m]
        nums1 = nums1+nums2
        nums1.sort()
        print(nums1)

在这里插入图片描述
python的print()函数输出列表时会自带一个空格,起初我还认为不是WA,而是presentation error
于是对输出格式进行了更改

## 错误代码 第二版
class Solution:
    def merge(self, nums1: [int], m: int, nums2: [int], n: int) -> None:
        """
        Do not return anything, modify nums1 in-place instead.
        """
        nums1 = nums1[:m]+nums2
        nums1.sort()
        print("[",end="")
        print(",".join(str(x) for x in nums1),end='')
        print("]",end='')

更改后空格确实没了,但还是错误
在这里插入图片描述
在这里插入图片描述
这时我才注意到输出是[1,2,3,0,0,0],可是我将nums1进行输出得到的是正确结果。
我最初以为是nums1.sort()出现了问题,于是改成nums1 = sorted(nums1),并进行测试

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

'''
运行结果
2550904029568
2550904029312
2550904029248
'''

查看变量的地址,发现在python中,每次对列表进行 nums1 = ‘’’ 的赋值操作,nums1的地址都会被改变。用sorted(nums1)和nums1.sort()却不会改变nums1的地址。
将nums1 = nums1[:m]+nums2这种写法在本题中是错误的。而应该对m后的元素直接进行变更,而不是将列表合并赋值给nums1。

## 正确代码
class Solution:
    def merge(self, nums1: [int], m: int, nums2: [int], n: int) -> None:
        """
        Do not return anything, modify nums1 in-place instead.
        """
        for i in range(n):
            nums1[m+i] = nums2[i]
        nums1.sort()

算法优化

这种写法确实简单,但效率并不高。题目中说到两个列表是有序的,而将两个列表合并后成为无序表,之后再进行排序这种做法并没有利用好有序表这个条件,所以可以进行优化。
在n1和n2上分别设立一个指针,比较两个数值的大小,将较小的元素存放到一个临时列表,然后移动指针,继续比较。最后把临时列表的值一个一个赋值到n1。
这种方法只把n1和n2遍历了一遍,时间复杂度为O(m+n)

# python3
class Solution:
    def merge(self, nums1: [int], m: int, nums2: [int], n: int) -> None:
        """
        Do not return anything, modify nums1 in-place instead.
        """
        k = m+n
        temp = [0]*k  #临时列表
        n1Index = 0  #定义两个指针
        n2Index = 0
        for i in range(k):
            if n1Index >= m:   #  nums1的元素已经取完,直接把nums2的元素填入
                temp[i] = nums2[n2Index]
                n2Index += 1
            elif n2Index >= n:   #nums2的元素已经取完,直接把nums1的元素填入
                temp[i] = nums1[n1Index]
                n1Index += 1
            elif nums1[n1Index] < nums2[n2Index]:
                temp[i] = nums1[n1Index]
                n1Index += 1
            else:
                temp[i] = nums2[n2Index]
                n2Index += 1
        nums1[:] = temp

在上述做法中,引入了临时列表temp,但在nums1中有几个0元素占用了空间,没有被利用起来。
这意味着可以进行优化,不需要引入临时列表temp。
在两个有序表中,6比3大,那么意味着6应该放在最后一个,之后指针2前移,5比3大,5应该在倒数第二个,2比3小,倒数第三个应该是3,2与2一样大,倒数第四个应该是2.。这样就不必引入临时列表了。
>在这里插入图片描述

class Solution2:
    def merge(self, nums1: [int], m: int, nums2: [int], n: int) -> None:
        """
        Do not return anything, modify nums1 in-place instead.
        """
        k = m + n
        n1Index = m-1
        n2Index = n-1
        for i in range(k-1,-1,-1):
            if n1Index < 0:  #n1已经取完,剩下的空直接填n2
                nums1[i] = nums2[n2Index]
                n2Index -= 1
            elif n2Index < 0: # n2已经取完,n1就不需要变动了
                break
            elif nums1[n1Index] > nums2[n2Index]:
                nums1[i] = nums1[n1Index]
                n1Index -= 1
            else:
                nums1[i] = nums2[n2Index]
                n2Index -= 1
Scratch离线版部署指南:解决资源缺失与页面显示异常问题 本文提供了一份详尽的Scratch离线版部署指南,旨在解决网络依赖导致的资源缺失与页面显示异常问题。通过从基础文件获取、自动化资源抓取到生产环境部署的完整流程,帮助教育工作者和开发者在无网络环境下搭建功能完整的本地Scratch编辑器,确保编程教学的顺利进行。 阅读详情

相关推荐

LangChain4j 开发

市场上主流的 Java 调用大模型的工具库有两种:LangChain4j 是一个 面向 Java 的开源框架,用于构建 基于大语言模型(LLMs) 的应用程序。它是 LangChain(Python 生态中非常流行的 LLM 应用框架)的 Java 实现,旨在让 Java 开发者能够轻松地集成和使用各种 LLM 服务,快速开发 智能聊天机器人、智能搜索、文档问答、Agent系统 等 AI 驱动的应用。官网文档:https://docs.langchain4j.dev/。引入依赖(JDK17 及以上): 构建

m0_62943934的博客 2718

Python 基础算法——合并两个有序数组

10. 合并两个有序数组示例:输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3输出:[1,2,2,3,5,6]解释:需要合并 [1,2,3] 和 [2,5,6]。合并结果是 [1,2,2,3,5,6]提示:给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。

Tony_33的博客 2976

10款AI工具赋能虚拟展厅设计:架构师效率提升90%的秘密武器

2020年全球疫情成为数字转型的催化剂,虚拟展厅从"可选项"迅速转变为"必需品"。根据Gartner最新报告,到2025年,超过70%的企业将采用虚拟展厅作为客户体验和产品展示的核心渠道。这一转变不仅是应急措施,更是商业模式的永久性革新。虚拟展厅突破了物理空间的限制——一个精心设计的虚拟展厅可以同时接待来自全球各地的访客,无需考虑场地容量;展品可以以数字形式永久保存,避免了物流和损耗问题;数据分析功能可以精确追踪每位访客的行为轨迹,提供前所未有的洞察。数据透视。

AI 领航者的博客 1547

Python实现"合并两个有序数组"的三种方法

给定两个有序整数数组nums1和nums2,合并nums1和nums2为数组nums1, 注意:            数组nums1和nums2初始化元素个数分别为m和n             假设num1有足够空间(长度超过m+n或与其相等)保存nums2中所有的元素 Example: Input: nums1 = [1,2,3,0,0,0], m = 3 nums2 = [2...

qiubingcsdn的博客 1万+

合并两个有序数组(Python)

题目: 给出一个有序的整数数组 A 和有序的整数数组 B ,请将数组 B 合并到数组 A 中,变成一个有序的升序数组 注意: 1.保证 A 数组有足够的空间存放 B 数组的元素, A 和 B 中初始的元素数目分别为 m 和 n,A的数组空间大小为 m+n 2.不要返回合并的数组,将数组 B 的数据合并到 A 里面就好了 3. A 数组在[0,m-1]的范围也是有序的 示例1 输入:[4,5,6],3,[1,2,3],3 返回值:[1,2,3,4,5,6] 说明: A数组为[4,5,6],B数组为[1,2,3

努力搬砖的打工人 3087

合并两个有序数组 三种解法(Python

直接合并然后排序 时间复杂度 O((m + n)log(m + n)) 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. """ nums1[m:] = nums2

You can either travel or read,but either your body or soul must be on the way. 3586

数据结构与算法1

分类:排序题目解答 题目 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。 解答 pr

hfy111222的博客 528

Python 合并两个有序数组

数组整体进行排序即可。

u011699626的博客 637

Python合并有序数组两种方法

数组是程序设计语言的通用称呼,在python里,列表就是我们常说的数组(以下列表 = 数组) 目录 1、用指针合并两个有序数组两个都是有序的) 2、用sort函数合并两个有序数组 1、用指针合并两个有序数组两个都是有序的) 先看下面两个数组 arr1 = [1 , 3 , 4 , 6 ,10] arr2 = [2 , 5 , 8 ,11] 先了解下思路,我们运用的方法是将...

Teaphon 2143

Python实现两个有序数组合并为一个有序数组

merge思路图:【2个有序数组合并过程】 临时变量i,j分别标识2个数组的起始位置。临时数组temp,用变量k表示其填充位置 a[i]与a[j]比较大小,依次填充到temp 最后判断哪个数组还有剩余start与end,然后将剩余部分之间加入到temp temp整体拷贝到原数组a中 代码实现 def merge(a, b): """ 合并2个有序数组,默认a,b都是从小到大...

hallo128的博客 4721

python怎么循环合并数组_Python实现的合并两个有序数组算法示例

本文实例讲述了Python实现的合并两个有序数组算法。分享给大家供大家参考,具体如下:思路按位循环比较两个数组,较小元素的放入新数组,下标加一(注意,较大元素对应的下标不加一),直到某一个下标超过数组长度时退出循环假设两个源数组的长度不一样,那么假设其中短的数组用完了,即全部放入到新数组中去了,那么长数组中剩下的那一段就可以直接拿来放入到新数组中去了。#coding=utf-8#合并数据test1...

weixin_39774905的博客 1651

合并两个有序数组python_两个有序数组合并python

看到其他部门的笔试题,发现有这个题目:两个有序数组合并,于是尝试着用python写出来具体如下:if__name__==‘__main__‘:a=[2,4,6,8,9,10]b=[0,1,3,6,7,9,100,134]counta=countb=0#分别记录两个数组遍历到哪个位置了c=[]foriinrange(counta,len(a)):forjinrange(count...

weixin_39609503的博客 157

合并两个有序数组python_Python3如何合并两个有序数组 Python3合并两个有序数组代码实例...

Python3如何合并两个有序数组?本篇文章小编给大家分享一下Python3合并两个有序数组代码实例,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。第一种思路,把两个数组合为一个数组然后再排序,问题又回归到冒泡和快排了,没有用到两个数组的有序性。(不好)第二种思路,循环比较两个有序数组头位元素的大小,并把头元素放到新数组中,从老数组中删掉,直到其中一个数组长度为0。然后再...

weixin_39874269的博客 296

leetcode88 python 合并两个有序数组

给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入: nums1 = [1,2,3,0,0,0], m = 3 nums2 = [2,5,6],...

IT_job的博客 3222

python数组合并并排序_两个有序数组合并python

看到其他部门的笔试题,发现有这个题目:两个有序数组合并,于是尝试着用python写出来关键:1、两个数组已经排序好,所以内部无需比较,比较都是存在于两个数组之间2、比较结束后,需要将其中一个数组的剩余序列添加到最终的数组具体如下:if__name__=='__main__':a=[2,4,6,8,9,10]b=[0,1,3,6,7,9,100,134]counta=countb=0#分别记...

weixin_39875832的博客 671

合并两个有序数组python实现)

题目描述: 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。 示例: 输入: nums1 = [1,2,3,0,0,0], m = 3 nums2...

weixin_44512019的博客 1149

Leetcode 88. 合并两个有序数组 Python实现

给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。 示例: 输入: nums1 = [1,2,3,0,0,0], m = 3 nums2 = [2,5,6], n = 3 输出: [1,2,2,3,5,6] 来源:力扣(LeetCode) 链

ChengSlime的博客 266

Python描述 LeetCode 88. 合并两个有序数组

Python描述 LeetCode 88. 合并两个有序数组   大家好,我叫亓官劼(qí guān jié ),在GitHub & CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博主目前仅在GitHub & CSDN中写博客,唯一博客更新的地址为:亓官劼的博客 ,近期将逐渐同步刷题相关记录到GitHub:[Algorithmic-learning-records] (https://github.com/qiguanjie/Algorithmic-learning-reco

一起加油 759

python 合并两个有序数组

给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 nums1 成为一个有序数组。 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。 示例: 输入: nums1 = [1,2,3,0,0,0], m = 3 nums2 = ...

李达西的博客 1万+

合并两个有序数组python_python算法---合并两个有序数组

leetcode-python-合并两个有序数组今天第一次电话面试,有点紧张,所以自己感觉表现的不是很好,面试过程中面试官问到了两个算法题,都是leecode上面的题目,而且我都做过,但是当时一下子都想不起来,回答的方法也都是比较傻的方法,尤其是合并两个有序数组的题目,在上个月15日做过,但是今天面试没能好好回答。以后做leetcode算法题目的时候,需要将当时解题的思路也要记录,而不是只把题目...

weixin_39760857的博客 547

两种思路将Python两个有序数组合并为一个有序数组

第一种思路: 把两个数组合为一个数组然后再排序,问题又回归到冒泡和快排了,没有用到两个数组的有序性。 第二种思路: 循环比较两个有序数组头位元素的大小,并把头元素放到新数组中,从老数组中删掉,直到其中一个数组长度为0。然后再把不为空的老数组中剩下的部分加到新数组的结尾。 第二种思路的排序算法与测试代码如下: def merge_sort(a, b): ret = [] while len(a)>0 and len(b)>0: if a[0] <= b[0]:

Python热爱者的博客 3600

python3合并两个列表考虑一个用毕_Python3合并有序数组 Python3合并两个有序数组代码实例...

想了解Python3合并两个有序数组代码实例的相关内容吗,天外归云在本文为您仔细讲解Python3合并有序数组的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:Python3,合并,有序数组,下面大家一起来学习吧。第一种思路,把两个数组合为一个数组然后再排序,问题又回归到冒泡和快排了,没有用到两个数组的有序性。(不好)第二种思路,循环比较两个有序数组头位元素的大小,并把头元素放到新数组中...

weixin_32466167的博客 146
上一篇: 两数之和-python
下一篇: 移动零-python
unseven
博客等级 码龄7年 687粉丝 99原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

unseven

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值