1、题目描述
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]
2、问题描述:
- 合并两个排好序的数组,其中第一个数组的长度可以包含两个数组,不开辟外的空间,从小到大排序。
3、问题关键:
- 考虑将数组从后往前排序,将最大的放在最后,一直排到第一个。
4、C++代码:
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int k = m + n - 1;//merge后的数组元素的最后一个下标。
m --, n --;//两个数组的最后一个元素的下标。
while (m >= 0 && n >= 0) {
if (nums1[m] < nums2[n]) {
nums1[k --] = nums2[n --];//每次就将最大的元素放在最后面。
}
else {
nums1[k --] = nums1[m --];
}
}
while(n >= 0) //由于是将第二个数组放到,第一个,只需要判断第二个数组是否全放过来了。
nums1[k --] = nums2[n--];
}
};