Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.
Note:
The number of elements initialized in nums1 and nums2 are m and n respectively.
You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold additional elements from nums2.
Example:
Input:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6], n = 3
Output: [1,2,2,3,5,6]
要把nums1和nums2合并成一个数组,并且按升序排序,要求合并到nums1里,并且保证nums1的size是足够的
思路:
一个简单粗暴的方法,把nums2的元素copy到nums1元素的后面,然后直接sort
还有一种就是逐个比较,把较大的元素放到nums1
但是如果从左到右比较的话,nums1的元素会被覆盖掉,不利于后面的比较,所以从末尾元素开始比较,由于较大的元素会先放到nums1的末尾(size that is greater or equal to m + n),不会对nums1本身元素进行覆盖,最后剩下的元素直接全部copy到nums1
//0ms
public void merge(int[] nums1, int m, int[] nums2, int n) {
int lastIndex = m + n - 1;
while (m > 0 && n > 0) {
if (nums1[m - 1] >= nums2[n - 1]) {
nums1[lastIndex--] = nums1[m - 1];
m --;
} else {
nums1[lastIndex--] = nums2[n - 1];
n --;
}
}
for(int i = m - 1; i >= 0; i--) {
nums1[lastIndex--] = nums1[i];
}
for (int i = n - 1; i >= 0; i--) {
nums1[lastIndex--] = nums2[i];
}
return;
}