0. 문제
https://leetcode.com/problems/merge-sorted-array/
1. 문제 설명
2. 문제 풀이
for (nums1의 빈 공간부터 nums1의 마지막 공간까지)
nums1의 빈 공간에 nums2의 값 저장
nums1 오름차순 정렬
3. 코드
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
for (int i = m; i < nums1.length; i++) {
nums1[i] = nums2[i - m];
}
Arrays.sort(nums1);
}
}
4. 결과
5. 개선점
위 코드의 시간 복잡도를 계산하면 다음과 같다.
for()
: O(n)sort()
: O((m+n) + log(m+n))시간 복잡도를 개선시키기 위해 투 포인터 알고리즘
을 사용할 수 있다. (참고)
풀이
풀이
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int i = m - 1;
int j = n - 1;
int k = m + n - 1;
while (j >= 0) {
if (i >= 0 && nums1[i] > nums2[j]) {
nums1[k--] = nums1[i--];
} else {
nums1[k--] = nums2[j--];
}
}
}
}