18.合併兩個有序陣列(簡單)

加油吧^0^~發表於2020-10-06

給你兩個有序整數陣列 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]
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.
        """
        '''法一:三指標法'''
        i = m-1
        j = n-1
        k = m+n-1
        while i>=0 and j>=0:
            if nums1[i] >= nums2[j]:
                nums1[k] = nums1[i]
                i -= 1
                k -= 1
            else:
                nums1[k] = nums2[j]
                j -= 1
                k -= 1
        while j >= 0 :
            nums1[k] = nums2[j]
            k -= 1
            j -= 1 
'''法二:藉助了一個輔助陣列'''
        # i = 0
        # j = 0
        # k = 0
        # res = []
        # for p in range(m + n):
        #     res.append(0)
        # while(i < m and j < n):
        #     if nums1[i] <= nums2[j]:
        #         res[k] = nums1[i]
        #         k += 1
        #         i += 1
        #     else:
        #         res[k] = nums2[j]
        #         k += 1
        #         j += 1
        # while i < m:
        #     res[k] = nums1[i]
        #     k += 1
        #     i += 1
        # while j < n:
        #     res[k] = nums2[j]
        #     k += 1
        #     j += 1
        # for i in range(m+n):
        #     nums1[i] = res[i]

在這裡插入圖片描述

相關文章