2016-08-01 27 views
1

的鏈接問題:merge sorted array合併排序數組在本文給出了:列表的就地修改不起作用

我不知道爲什麼退出功能時,我的解決方案不修改列表nums1 合併。這裏是代碼:

def merge(self, nums1, m, nums2, n): 
    """ 
    :type nums1: List[int] 
    :type m: int 
    :type nums2: List[int] 
    :type n: int 
    :rtype: void Do not return anything, modify nums1 in-place instead. 
    """ 
    i = 0 
    j = 0 
    while i < m and j < n: 
     if nums1[i] < nums2[j]: 
      i += 1 
     else: 
      nums1 = nums1[:i-1] + [nums2[j]] + nums1[i-1:] 
      i += 1 
      j += 1 
    if i == m: 
     nums1 = nums1 + nums2 
+3

您未修改nums1,您正在創建一個新列表並將其命名爲nums1。說nums1 =(任何)不會改變任何nums1曾經是,它只是創建一個新的列表,並將其分配給變量nums1(擦除該範圍內存在的任何其他分配)。 – James

+0

所以當我退出這個函數時,我在這個函數中創建的名爲nums1的列表將不會再保存在內存中。是對的嗎? – JoshuaW1990

+0

由於最後一行,是 – Brian

回答

0

列表是可變的,所以你可以創建你正在尋找的行爲。你需要做的是將新值賦給nums1中的特定索引。當你使用拼接時,你實際上正在創建新的列表。使用列表功能,如[].insert(),[].pop(),[].extend()來實現您正在尋找的功能。

+0

對於記錄,您可能只需使用insert()和'流行'如果我明白你想要做的正確。任何時候,list2中的項目都小於list1中的項目,即「list1.insert(i,list2.pop)',假設它們已被排序。 – bravosierra99

+0

是的。我不是使用'nums1 = nums1 + nums2',而是通過像nums1 [m + n-1] = nums1 [m-1]這樣一個一個地修改列表中的元素來修改列表。感謝幫助。 – JoshuaW1990

+0

當然,如果你覺得我們幫助過的話,會感激upvote!很高興你得到它! – bravosierra99