ALGORITHM/릿코드

88. Merge Sorted Array

JC0 2023. 11. 1. 16:05

https://leetcode.com/problems/merge-sorted-array/description/?envType=study-plan-v2&envId=top-interview-150

 

Merge Sorted Array - LeetCode

Can you solve this real interview question? Merge Sorted Array - You are given two integer arrays nums1 and nums2, sorted in non-decreasing order, and two integers m and n, representing the number of elements in nums1 and nums2 respectively. Merge nums1 an

leetcode.com

1.아이디어

투포인터 알고리즘을 사용하여 문제를 해결한다.

 

2.도식화

i는 m+n-1로 초기화한다. p1 = m-1, p2 = n-1로 초기화한다.

nums1[p1]과 nums[p2]를 비교한 후에 큰 값을 i에 넣어주고 큰 쪽 배열의 포인터를 -1, i를 -1한다.

nums2의 모든 요소를 nums1으로 옮길 때 까지 반복해야 하기 때문에 p2가 0보다 작을 때 까지 반복한다.

3.소스코드

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

            }
            else
            {
                nums1[i--] = nums2[p2--];

            }

        }
    }
}