https://leetcode-cn.com/problems/merge-sorted-array/
1、利用arraycopy函数合并后排序,官方的解答太秀了。我确实没想起来这样做。
时间复杂度比较大。
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
System.arraycopy(nums2,0,nums1,m,n);
Arrays.sort(nums1);
}
}
2、我的策略:双指针从前往后扫描。这也是官方的第二种解答方法,代码比我写的好,很简洁。
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int[] nums1_copy=new int[m];
//复制nums1数组
System.arraycopy(nums1, 0, nums1_copy, 0, m);
//p1为nums1_copy指针,p2位nums2指针,p为新nums1的下标记录指针
int p1=0,p2=0,p=0;
while((p1<m)&&(p2<n)) {
nums1[p++]=(nums1_copy[p1]<nums2[p2])?nums1_copy[p1++]:nums2[p2++];
}
if(p1<m) {
System.arraycopy(nums1_copy, p1, nums1, p1+p2, m+n-p1-p2);
}
else if(p2<n) {
System.arraycopy(nums2, p2, nums1, p1+p2, m+n-p1-p2);
}
}
}