Leetcode # 88. Merge Sorted Array
- 2022.11.29
- ★ Easy LeetCode Two Pointers
https://leetcode.com/problems/merge-sorted-array/
First Solution
從尾到頭逆著做回來
Time Complexity: O(m + n)
Space Complexity: O(1)
class Solution {
public:
void merge(vector& nums1, int m, vector& nums2, int n) {
int i1 = m - 1, i2 = n - 1;
for(int i = m + n - 1; i > -1; i--){
if(i2 < 0)continue;
else if(i1 > -1 && nums1[i1] > nums2[i2]){
nums1[i] = nums1[i1];
i1--;
}else{
nums1[i] = nums2[i2];
i2--;
}
}
}
};
Solution: Two Pointers
Time Complexity: O(m + n)
Space Complexity: O(1)
class Solution:
def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
"""
Do not return anything, modify nums1 in-place instead.
"""
i = j = k = 0
while i < m and j < n:
# do some logic here
if nums1[i] < nums2[j]:
nums1[k] = nums1[i]
else:
nums1[k], nums2[j] = nums2[j], nums1[i]
_j = j
while _j + 1 < n and nums2[_j] > nums2[_j + 1]:
nums2[_j], nums2[_j + 1] = nums2[_j + 1], nums2[_j]
_j += 1
i += 1
k += 1
"""
while i < m:
# do logic
i += 1
"""
while j < n:
# do logic
nums1[k] = nums2[j]
j += 1
k += 1
return nums1
Refined Solution: Two Pointers
效法 first solution 逆著做回來
Time Complexity: O(m + n)
Space Complexity: O(1)
class Solution:
def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
"""
Do not return anything, modify nums1 in-place instead.
"""
i, j, k = m - 1, n - 1, m + n - 1
while i >= 0 and j >= 0:
# do some logic here
if nums1[i] > nums2[j]:
nums1[k] = nums1[i]
i -= 1
else:
nums1[k] = nums2[j]
j -= 1
k -= 1
for l in range((i + 1) if i > 0 else (j + 1)):
nums1[k - l] = nums1[i - l] if i > 0 else nums2[j - l]
return nums1
Last Updated on 2023/08/16 by A1go