-
[array] merge sorted arrayAlgorithm/LeetCode 2025. 2. 22. 15:39
✅ Problem
https://leetcode.com/problems/merge-sorted-array/description/
✅ Approach & Solution
공통 : 투 포인터 사용
방식1) 작은 원소부터 넣기 (추가 공간 사용)
더보기- 정답값을 담을 추가 배열(result)을 선언해 작은 원소부터 넣음
- 문제 조건에서 nums1 배열에 값을 담으라고 했으므로 추가 배열(result)에 저장된 값들을 nums1 배열로 옮김
- nums1 배열은 m + n 개의 원소를 담을 수 있음
class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { int[] result = new int[m + n]; int p1 = 0, p2 = 0, p3 = 0; while (p1 < m && p2 < n) { if (nums1[p1] < nums2[p2]) { result[p3] = nums1[p1]; p1++; } else { result[p3] = nums2[p2]; p2++; } p3++; } // 남은 숫자 처리 while (p1 < m) { result[p3] = nums1[p1]; p1++; p3++; } while (p2 < n) { result[p3] = nums2[p2]; p2++; p3++; } // num1에 결과 넣기 for (int i = 0; i < m + n; i++) { nums1[i] = result[i]; } } }
방식2) 큰 원소부터 넣기
더보기- 큰 원소부터 넣을 경우 nums1 배열의 마지막 index부터 채워지기 때문에 추가 배열을 사용하거나 nums1 배열의 원소를 뒤로 밀지 않아도 됨
class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { int mIdx = m - 1; int nIdx = n - 1; int right = m + n - 1; while (nIdx >= 0) { if (mIdx >= 0 && nums1[mIdx] > nums2[nIdx]) { nums1[right] = nums1[mIdx]; mIdx--; } else { nums1[right] = nums2[nIdx]; nIdx--; } right--; } } }
'Algorithm > LeetCode' 카테고리의 다른 글
[string] reverse string (0) 2025.03.08 [string] valid palindrome (0) 2025.03.08 [linked list] merge two sorted lists (0) 2025.02.22 [linked list] palindrome linked list (0) 2025.02.16 [array] maximum subarray (0) 2025.02.15