当前位置: 首页 > 后端技术 > Python

力扣-0088.MergeSortedArray合并两个有序数组【Python】

时间:2023-03-26 16:18:31 Python

LeetCode0088.MergeSortedArray合并两个有序数组【易】【Python】【双指针】题目英文题目链接给定两个有序整数数组nums1和nums2,合并nums2作为一个排序数组放入nums1中。注:nums1和nums2中初始化的元素个数分别为m和n。您可以假设nums1有足够的空间(大小大于或等于m+n)来容纳nums2中的其他元素。示例:输入:nums1=[1,2,3,0,0,0],m=3nums2=[2,5,6],n=3Output:[1,2,2,3,5,6]翻译中文题目链接给定两个有序整数数组nums1和nums2,将nums2合并为nums1,使num1成为有序数组.解释:将nums1和nums2的元素个数分别初始化为m和n。你可以假设nums1有足够的空间(空间大小大于或等于m+n)来容纳nums2中的元素。示例:输入:nums1=[1,2,3,0,0,0],m=3nums2=[2,5,6],n=3输出:[1,2,2,3,5,6]思路是把双指针的顺序倒过来,nums1从第m个元素开始往前,nums2从第n个元素开始往前,取大者存入nums1的第n+m-1个位置,然后从第n个开始慢慢存回到前面。最后检查是否还有nums2,如果有则全部添加到nums1中。时间复杂度:O(m+n)Python代码类Solution(object):defmerge(self,nums1,m,nums2,n):""":typenums1:List[int]:typem:int:typenums2:List[int]:typen:int:rtype:None不要返回任何东西,而是就地修改nums1。"""whilem>0andn>0:ifnums1[m-1]>nums2[n-1]:nums1[m+n-1]=nums1[m-1]m-=1else:nums1[m+n-1]=nums2[n-1]n-=1ifn>0:#如果nums2有剩余,全部加到nums1nums1[:n]=nums2[:n]测试代码if__name__=="__main__":nums1=[1,2,3,0,0,0]nums2=[2,5,6]m,n=3,3Solution().merge(nums1,m,nums2,n)print(nums1)如果nums1=[1,2,3,0,0,0,0],而nums2=[2,5,6],m=3,n=3,则合并后的nums1=[1,2,2,3,5,6,0],多出的0不自动卖掉离开。