源代码:
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int i=0;
int j=0;
int k=0;
vector<int> nums3(m+n);
while(i<m&&j<n){
if(nums1[i]<nums2[j]){
nums3[k++]=nums1[i++];
}else{
nums3[k++]=nums2[j++];
}
}
while(i<m){
nums3[k++]=nums1[i++];
}
while(j<n){
nums3[k++]=nums2[j++];
}
int s=0;
while(s<k){
nums1[s++]=nums3[s++];
}
}
};
原因:数组越界
解决:
问题出现在最后一个while循环中:
while(s<k){
nums1[s++]=nums3[s++];
}
该循环中s前后加了两次,所以造成数组越界。
修改后:
while(s<k){
nums1[s]=nums3[s];
s++;
}