题解 | #合并两个有序的数组#
合并两个有序的数组
http://www.nowcoder.com/practice/89865d4375634fc484f3a24b7fe65665
双指针。不开辟额外的空间。替换的思想。
往num1中方放数据,若num2先遍历完,就结束了(说明nums2中的数据都已经添加到num1中了),
若num1先遍历完,则将nums2中剩下的加入到num1中,完成。
public class Solution { public void merge(int nums1[], int m, int nums2[], int n) { int nums1End = m-1; int nums2End = n-1; int index = m+n-1;//合并后最后一个元素所在的位置 while(nums1End >= 0 && nums2End >= 0)//AB合并,谁大就先放谁 nums1[index --] = nums1[nums1End] > nums2[nums2End] ? nums1[nums1End --] : nums2[nums2End --]; while(nums2End >= 0)//如果B没有遍历完,那么之间丢在A数组里面 nums1[index --] = nums2[nums2End --]; } }