首页 > 其他 > 详细

88. Merge Sorted Array

时间:2020-07-03 16:05:02      阅读:41      评论:0      收藏:0      [点我收藏+]

88. Merge Sorted Array

技术分享图片

 

 

 思路一:把nums2直接复制到nums1中,然后sort,但是你会发现地址在sort时返回的地址已经发生改变,所以这种解法是不对的。

class Solution:
    def merge1(self,nums1,m,nums2,n):
        print(id(nums1))
        len1 = len(nums1)
        len2 = n
        for i in range(len1-len2,len1):
            nums1[i] = nums2[i-(len1-len2)]
        print(id(nums1))
        nums1 = sorted(nums1)
        print(id(nums1))#此时nums1的地址被sorted改变,所以nums1是新地址,不符合题中不能用新空间
        #print(nums1)
        nums1 = nums1[(len1-m-n):]
        print(id(nums1))#肯定首地址都发生变化了
        return nums1
        #print(nums1)

先贴出来,等下分析关于python的复制时地址的问题。

思路二:尽量对nums1进行改变,把大的数从后向前复制,并保持nums1的地址一直没有发生改变

 1     def merge2(self, nums1, m, nums2, n):
 2         a = m-1
 3         b = n-1
 4         c = m + n -1
 5         if n == 0:
 6             pass
 7         elif 0 == m:
 8             nums1[:n] = nums2[:n]
 9         else:
10             while (a >= 0)and(b >= 0):
11                 if nums1[a] <= nums2[b]:
12                     nums1[c] = nums2[b]
13                     b = b-1
14                     c = c-1
15                 else:
16                     nums1[c] = nums1[a]
17                     c = c-1
18                     a = a-1
19             if a >= 0:
20                 pass
21             if b >= 0:
22                 nums1[:b+1] = nums2[:b+1]
23             return nums1



接下来分析下nums1 = ......和nums1[:]前者复制地址会发生变化后者不会发生任何改变的原因:

技术分享图片
到这里我们就明白了为何要使用 nums1[:]。这里 sorted() 函数返回的必然是一个新的对象,因此我们需要 nums1[:], 而 [] 也代表一个新的 list 对象,我们需要用 nums1[:] = []。
ps: 如果没有就地修改的要求,则用 nums1 也是完全正确的。
因此对思路一进行代码修改,顺利通过
1 class Solution:
2     def merge(self,nums1,m,nums2,n):
3         len1 = len(nums1)
4         len2 = n
5         for i in range(len1-len2,len1):
6             nums1[i] = nums2[i-(len1-len2)]
7         print(id(nums1))
8         nums1[:] = sorted(nums1)#加冒号指向自己的地址,不加冒号指向新的被赋值地址
9         nums1[:] = nums1[(len1-m-n):]

下面讲一下关于list的一些操作

技术分享图片

 

 技术分享图片

 

 

 

88. Merge Sorted Array

原文:https://www.cnblogs.com/henuliulei/p/13230577.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!