Merge Sorted Array

초보개발·2023년 8월 23일
0

leetcode

목록 보기
1/39

Merge Sorted Array

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

문제 요약

비내림차순 정수 배열 nums1와 nums2를 합쳐 비내림차순으로 정렬한다.

  • return 값은 없으며 nums1 배열로 합쳐야 한다.

풀이

  • nums1 배열의 길이는 n + m 이다.
  • nums1 배열 [..., 0, 0, 0] 에서 0에다 nums2의 원소를 추가한다.
  • nums1 배열을 정렬한다.

수도 코드

def merge(nums1, m, nums2, n):
    for (i = 0...n번) :
    	nums1[m + i] = nums[i];

    nums1.sort()   

Solution(Java)

import java.util.*;

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        for(int i = 0; i < n; i++) {
            nums1[m + i] = nums2[i];
        }
        Arrays.sort(nums1);
    }
}

Arrays.sort()의 경우 Collections.sort()와 다르게 최악의 경우 O(n^2)가 걸린다고 한다.
이 문제는 nums1의 자료형을 수정할 수 없기 때문에 최선의 방법이지 않을까 싶다.

nums1 배열의 제약조건이 없다면, result 배열을 선언하고, 각 배열의 첫번째를 가리키는 포인터를 두어 비교해가면서 탐색할 수 있을 것 같다.

while p1 < m && p2 < n:
  if (nums1[p1] > nums2[p2]) 
      result[p3++] = nums2[p2++]
  else if (nums1[p1] < nums2[p2])
      result[p3++] = nums1[p1++]
  else
      result[p3++] = nums1[p1++]
      result[p3++] = nums2[p2++]

0개의 댓글