Merge Sorted Array

Yohan Kim·2021년 9월 1일
0

problem

정렬된 배열 두개가 주어질 때, 합치는 문제입니다.

Input: nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
Output: [1,2,2,3,5,6]

https://leetcode.com/problems/merge-sorted-array

solution

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

후기

처음에는 swap나 앞에서 부터 계산하는 것을 생각해보았는데
생각보다 복잡하고, 추가로 이미 공간이 주어졌으므로 뒤에서 부터 큰 값을 찾으면 어떨까라고 생각해보고 코드를 구현했습니다.
// 1 2 3 000
// 2 5 6

mn 22->3 6 -> 6 [i+j+1] 123006
mn 21->3 5 -> 5 [i+j+1] 123056
mn 20->3 2 -> 3 [i+j+1] 123356
mn 10->2 2 -> 2 [i+j+1] 122356
mn 00->1 2 -> 2 [i+j+1] 122356

while문이 끝난 후, m이 0이 아니라면 이미 nums2의 값을 모두 넣었다는 뜻이므로 추가 작업이 필요없습니다.

n이 0이 아니라면 nums1의 앞의 나머지 부분은 nums2로 교채해야하므로 if(n) -> n이 0이 아니라면 실행
하는 코드를 만들었습니다.

profile
안녕하세요 반가워요!

0개의 댓글