https://leetcode.com/problems/merge-sorted-array/
Input: nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
Output: [1,2,2,3,5,6]
1번 배열에 2번 배열을 합치면 된다. 배열에 init 되어있는 수 만큼 argument로 넘겨진다.
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n)
{
int numsIdx = m - 1;
int num2Idx = n - 1;
int wIdx = nums1.size() - 1;
while (numsIdx >= 0 && num2Idx >= 0)
{
if (nums1[numsIdx] <= nums2[num2Idx])
nums1[wIdx--] = nums2[num2Idx--];
else
nums1[wIdx--] = nums1[numsIdx--];
}
while (num2Idx >= 0)
{
nums1[wIdx--] = nums2[num2Idx--];
}
}
};
0보다 크거나같을 때까지만 해주면 된다. index가 -1이 되면 끝이난다.
채워지지 않은 값들도 마저 넣어주면 된다.
두개의 ptr 가 index 0 까지 이동하는 시간 O(n + m) 을 가지게 된다.