LeetCode-088. Merge Sorted Array

1. 題目

Merge Sorted Array

合併兩個有序數組
假設nums1有足夠的空間(>=m+n)來保存nums2中的附加元素

2. 分析

採用歸併排序的思想
1:兩數組都有序,所以按順序比較大小即可。
建立一個長度爲m+n的total數組,逐個比較nums1、nums2數組中的元素,
先將較小元素放入total,再考慮兩數組剩餘元素,
最後再把total的元素重新賦值到A數組中。

2:由於nums1有足夠空間,所以可以從後到前遍歷,無須開闢新數組

3. 代碼

1)

class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        if(m < 0 || n < 0)
            return;

        int len = m + n;
        int *total = new int[len];

        int i = 0, j = 0, k = 0;
        while(i < m && j <n)
        {
            if(nums1[i] <= nums2[j])
            {
                total[k++] = nums1[i++];
            }
            else
            {
                total[k++] = nums2[j++];
            }
        }

        while(i < m)
        {
            total[k++] = nums1[i++];
        }
        while(j < n)
        {
            total[k++] = nums2[j++];
        }

        for(int p = 0; p < len; ++p)
            nums1[p] = total[p];
    }
};

2)

class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        if(m < 0 || n < 0)
            return;

        int k = m + n - 1;
        --m;
        --n;

        while(m >= 0 && n >= 0)
        {
            if(nums1[m] > nums2[n])
                nums1[k--] = nums1[m--];
            else
                nums1[k--] = nums2[n--];
        }

        while(n >= 0)
            nums1[k--] = nums2[n--];

        return;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章