目录
LeetCode-88题
给定两个非递减排序的数组num1和num2,并给出两者的元素个数分别为m和n,合并两个数组,使合并后仍然按非递减排序
java
public class Solution {
/**
* 这里使用的是双指针的解法
*/
public void merge(int[] nums1, int m, int[] nums2, int n) {
// check
if (n <= 0 && m <= 0)
return;
if (m <= 0) {
System.arraycopy(nums2, 0, nums1, 0, n);
return;
}
if (n <= 0)
return;
int[] newArr = new int[m + n];
// 定义两个指针
int p1 = 0;
int p2 = 0;
int i = 0;
// 将指针指向小的元素放入结果集数组中,并移动对应指针
while (p1 < m && p2 < n)
newArr[i++] = nums1[p1] < nums2[p2] ? nums1[p1++] : nums2[p2++];
// 将剩余元素放入结果集数组
while (p1 < m)
newArr[i++] = nums1[p1++];
while (p2 < n)
newArr[i++] = nums2[p2++];
// 应题目要求放入num1中
System.arraycopy(newArr, 0, nums1, 0, newArr.length);
}
}