0088. Merge Sorted Array #
题目 #
- 给定两个按 非递减顺序 排列的整数数组
nums1
和nums2
,另有两个整数m
和n
,分别表示nums1
和nums2
中的元素数目。 - 合并
nums2
到nums1
中,使合并后的数组同样按 非递减顺序 排列。 - 合并后的元素存储在数组
nums1
中。设置nums1
的初始长度为m + n
,其中前m
个元素表示应合并的元素,后n
个元素为0
,应忽略。nums2
的长度为n
。
思路 #
双指针 #
- 数组
nums1
和nums2
是有序数组。 - 从前向后遍历时需要移动数组元素,从后向前遍历会简化过程。
代码 #
双指针 #
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int ptr1 = m - 1, ptr2 = n - 1, ptr = m + n - 1;
while (ptr1 > -1 && ptr2 > -1) nums1[ptr--] = nums1[ptr1] >= nums2[ptr2] ? nums1[ptr1--] : nums2[ptr2--];
while (ptr > -1) nums1[ptr--] = ptr1 > -1 ? nums1[ptr1--] : nums2[ptr2--];
}
}