class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int i = m-1; //nums1指针
int j = n-1; //nums2指针
int k = m+n-1; //返回数组指针
while(k>=0&&i>=0&&j>=0)
{
if(nums1[i]<=nums2[j])
{
nums1[k] = nums2[j];
j--;
}
else
{
nums1[k] = nums1[i];
i--;
}
k--;
}
if (j>=0)
{
while(k>=0&&j>=0)
{
nums1[k] = nums2[j];
k--;
j--;
}
}
}
};
思路:非递减顺序排列即是指:数列递增,但不是单调递增,中间可以有重复数。
通过三个指针,指针指向数组末尾,从数组末尾开始比较,将大的数放在数组的最后。比较完后,如果nums2的数较小,再将nums2的数复制到nums1。