在leetcode里做到将两个有序数组合并成一个,在原地第一个数组下进行(假设第一个数组的存储单元够用)本来是一个很简单的问题。自己在随便初始化vector<int>变量时候不知道 vector<int> a(m, m + 9);里面9所选的大小应该为数组的大小,选成了8.导致一直有问题。。啊啊啊,细节决定成败啊。还有一点就是方法中要注意while (j >= 0 && i >= 0)中i>=0的判断。否则的话第一个数组选择完后一直没有第二个数组剩下要比较的元素大,则第一个数组下标一直自减,最后会是很大的负数,导致数组越界。
#include <vector>
#include <iostream>using namespace std;
//class Solution
//{
//public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n)
{
int k = m + n - 1, i = m - 1, j = n - 1;
while (j >= 0 && i >= 0)
{
if (nums1[i] >= nums2[j])
{
nums1[k--] = nums1[i--];
}
else
nums1[k--] = nums2[j--];
}
if (j >= 0)
{
while (j >= 0)
nums1[k--] = nums2[j--];
}
// int i;
for (i = 0; i < m + n; i++)
{
cout<<nums1[i]<<"\t";
}
}
//}//;
int main()
{
int m[9] = {0,0,3,0,0,0,0,0,0};
int n[6] = {-1,1,1,1,2,3};
vector<int> a(m, m + 9);
vector<int> b(n, n + 6);
merge(a, 3, b, 6);
return 0;
}