무냐의 개발일지
88. 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 and nums2 into a single array sorted in non-decreasing order.
The final sorted array should not be returned by the function, but instead be stored inside the array nums1. To accommodate this, nums1 has a length of m + n, where the first m elements denote the elements that should be merged, and the last n elements are set to 0 and should be ignored. nums2 has a length of n.
Example 1:
Input: nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
Output: [1,2,2,3,5,6]
Explanation: The arrays we are merging are [1,2,3] and [2,5,6].
The result of the merge is [1,2,2,3,5,6] with the underlined elements coming from nums1.
Example 2:
Input: nums1 = [1], m = 1, nums2 = [], n = 0
Output: [1]
Explanation: The arrays we are merging are [1] and [].
The result of the merge is [1].
Example 3:
Input: nums1 = [0], m = 0, nums2 = [1], n = 1
Output: [1]
Explanation: The arrays we are merging are [] and [1].
The result of the merge is [1].
Note that because m = 0, there are no elements in nums1. The 0 is only there to ensure the merge result can fit in nums1.
num1 에 num2를 합치는데, 대신 Increasing order를 유지해야 되는 문제다
Time Complexity는 O(m+n)으로 유지해야 한다
💡 풀이
def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
a, b, write_index = m-1, n-1, m+n-1
while b>=0:
if a>=0 and nums1[a] > nums2[b]:
nums1[write_index] = nums1[a]
a-=1
else:
nums1[write_index] = nums2[b]
b-=1
write_index -= 1
✍️ 해설
좀 생각이 많이 필요했는데
일단, nums1, nums2에 대한 인덱스를 최대한 단순화해서 따로 변수를 만들어준다. 내가 풀기 쉽도록!
nums2에 원소가 남아있는 한, 반복하는데
nums1에 원소가 남아있고 & nums1의 마지막 원소가 nums2의 마지막 원소보다 클 때,
nums1의 맨뒤에 nums1의 큰 원소를 집어넣는다.
하나라도 아닐 경우에는 b의 원소를 집어넣는다
뭐든 입력할 때마다 write_index -= 1
🥳 배운점
변수를 먼저 단순하게 설정해줘도 time complexity에는 꼬딱지만한 영향을 미친다네
'LeetCode 코딩테스트' 카테고리의 다른 글
BST: Validate BST (0) | 2024.07.04 |
---|---|
27. Remove Element (1) | 2024.07.03 |
Heap: Maximum Element in a Stream (1) | 2024.07.03 |
Heap: Kth Smallest Element in an Array (파이썬 remove(), pop(), del 의 차이점) (0) | 2024.07.03 |
[기본개념] Heap 구조 (1) | 2024.07.03 |