天天看點

Leetcode-88-合并兩個有序數組

題目連結

題目描述

如題目

合并後的數組在 nums1 中,nums1初始長度為(m+n).

思路

  1. 雙指針,分别指向nums1和nums2的開頭
  2. 小的數記錄進新數組ans, 對應的指針++.
  3. 其中一個指針到頭後,把另一個數組剩餘的數放新數組後邊

(注意:a[i] = b[i++]的運算順序......)

C++代碼

class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        vector<int> t(m+n);
        int p1=0, p2=0;
        while (p1<m || p2<n)
        {
            if (p1 == m)
                t[p1+p2-1] = nums2[p2++];
            else if(p2 == n)
                t[p1+p2-1] = nums1[p1++];
            else if (nums1[p1] < nums2[p2])
                t[p1+p2-1] = nums1[p1++];
            else 
                t[p1+p2-1] = nums2[p2++];
        }
        for (int i = 0; i < n+m; i++)
            nums1[i] = t[i];
    }
};