classSolution{publicvoidmerge(int[] nums1,int m,int[] nums2,int n){// Make a copy of nums1.int[] nums1_copy =newint[m];
System.arraycopy(nums1,0, nums1_copy,0, m);// Two get pointers for nums1_copy and nums2.int p1 =0;int p2 =0;// Set pointer for nums1int p =0;// Compare elements from nums1_copy and nums2// and add the smallest one into nums1.while((p1 < m)&&(p2 < n))
nums1[p++]=(nums1_copy[p1]< nums2[p2])? nums1_copy[p1++]: nums2[p2++];// if there are still elements to addif(p1 < m)
System.arraycopy(nums1_copy, p1, nums1, p1 + p2, m + n - p1 - p2);if(p2 < n)
System.arraycopy(nums2, p2, nums1, p1 + p2, m + n - p1 - p2);}}
作者:LeetCode
链接:https://leetcode-cn.com/problems/merge-sorted-array/solution/he-bing-liang-ge-you-xu-shu-zu-by-leetcode/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
方法三 : 双指针 / 从后往前
classSolution{publicvoidmerge(int[] nums1,int m,int[] nums2,int n){// two get pointers for nums1 and nums2int p1 = m -1;int p2 = n -1;// set pointer for nums1int p = m + n -1;// while there are still elements to comparewhile((p1 >=0)&&(p2 >=0))// compare two elements from nums1 and nums2 // and add the largest one in nums1
nums1[p--]=(nums1[p1]< nums2[p2])? nums2[p2--]: nums1[p1--];// add missing elements from nums2
System.arraycopy(nums2,0, nums1,0, p2 +1);}}
作者:LeetCode
链接:https://leetcode-cn.com/problems/merge-sorted-array/solution/he-bing-liang-ge-you-xu-shu-zu-by-leetcode/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。