1. 程式人生 > >leetcode88題 題解 翻譯 C語言版 Python版

leetcode88題 題解 翻譯 C語言版 Python版

88. Merge Sorted Array

Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.

Note:
You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold additional elements from nums2. The number of elements initialized in nums1and nums2

 are m and n respectively.

88.合併有序陣列

給定兩個有序整型陣列nums1和nums2,把nums2合併到nums中成一個有序陣列

注意:

你可以假定nums1有足夠的空間,也就是說大於等於m+n,能放的下nums2的額外元素。陣列nums1和nums2初始化化時各自元素個數是m和n。

思路:很明顯的歸併。因為最後合併結果要放在nums1中,所以我們不能從頭開始歸併,這樣可能會覆蓋nums1的部分元素。所以我們選擇從末尾開始歸併。因為合併後的長度很好計算,所以只要倒序遍歷兩個陣列,每次取較大的放入歸併後陣列應該放的位置就行了。

void merge(int* nums1, int m, int* nums2, int n) {
    int index = m + n - 1;
    int i = m - 1;
    int j = n - 1;
    while (j >= 0){
        if (i < 0) nums1[index--] = nums2[j--];
        else nums1[index--] = nums1[i] > nums2[j] ? nums1[i--] : nums2[j--];
    }
}


class Solution(object):
    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.
        """
        index = m + n - 1
        i = m - 1
        j = n - 1
        while j >= 0:
            if i < 0:
                nums1[index] = nums2[j]
                j -= 1
            else:
                if nums1[i] > nums2[j]:
                    nums1[index] = nums1[i]
                    i -= 1
                else:
                    nums1[index] = nums2[j]
                    j -= 1
            index -= 1