88. Merge Sorted Array

Mô tả
https://leetcode.com/problems/merge-sorted-array/
Ý tưởng
Sử dụng hai con trỏ để duyệt từ cuối mảng
nums1
(vị trím-1
) vànums2
(vị trín-1
).Bắt đầu điền giá trị vào vị trí cuối cùng của
nums1
(tạim + n - 1
), và so sánh giá trị từ hai mảng:Nếu
n == 0
: Mảngnums2
đã được ghép xong → Dừng thuật toán.Nếu
m == 0
: Chỉ còn lại các phần tử trongnums2
, ta sao chép toàn bộ vào đầunums1
.Nếu
nums1[m - 1] > nums2[n - 1]
: Đưanums1[m - 1]
vào vị trí cuối cùng, sau đó giảmm
.Ngược lại: Đưa
nums2[n - 1]
vào vị trí cuối cùng, sau đó giảmn
.
👉 Quá trình này tiếp tục cho đến khi tất cả phần tử của nums2
được ghép vào nums1
.
My solution
https://leetcode.com/problems/merge-sorted-array/solutions/6458322/solution-with-two-pointer/
Code
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
while (m + n - 1 >= 0) {
if (n == 0) {
break;
} else if (m == 0) {
nums1[n - 1] = nums2[n - 1];
n--;
} else if (nums1[m - 1] > nums2[n - 1]) {
nums1[m + n - 1] = nums1[m - 1];
m--;
} else {
nums1[m + n - 1] = nums2[n - 1];
n--;
}
}
}
}
Độ phức tạp
Time complextity: O(n)
Space complexity: O(1)
Subscribe to my newsletter
Read articles from Duong Tan Thanh directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
