정렬이 되어 있는 num1,2 배열을 합쳐
num1,2가 정렬되어 합쳐진 새로운배열을 num1으로 만들어라
여기서 nums1의 0은 nums2의 크기만큼 미리 자리를 만들어둔 것이다.
인수로 각 배열이 가지고있는 숫자개수를 m, n으로 입력받는다
nums1 = [1, 2, 3, 0, 0, 0]
nums2 = [2, 5, 6]
이 때의 time complexity는 O(n+m)이다
void merge (int [] nums1, int m, int [] nums2, int n) {
int num1Idx = m - 1; //nums1배열 마지막 숫자 인덱스
int num2Idx = n - 1; //nums2배열 마지막 숫자 인덱스
int wIdx = nums.length - 1; // nums1배열 맨 마지막부터 써내려갈 index
if (num2Idx < 0) { // nums2에 쓸 숫자가 없다면 종료
return;
}
while (0 <= num1Idx && 0 <= num2Idx) {
int num1 = nums1[num1Idx];
int num2 = nums2[num2Idx];
if (num2 <= num1) { // num1이 더크면 wIdx에 num1을 기록하고 num1, wIdx를 왼쪽으로
int num = num1;
num1[wIdx] = num;
num1Idx--;
wIdx--;
} else {
int num = num2;
num1[wIdx] = num;
num2Idx--;
wIdx--;
}
}
while (0 <= num2Idx) {
//nums2에 있는 값을 이미 다 옮겼다면 num1, num2가 비교가 안돼
//num1,2비교로는 처리가 불가능하므로
nums1Idx[wIdx] = nums2[num2Idx];
nums2Idx--;
wIdx--;
}
}