#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:
vector<int>::iterator find_pos(vector<int> nums1,int t) {
int i = 0;
while (nums1[i] <= t) {
i++;
}
return nums1.begin() + i;
}
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
for (int i = 0; i < n; i++) {
nums1.insert(find_pos(nums1, nums2[i]), nums2[i]);
}
}
};
int main() {
vector<int> n1 = { 1,2,3,0,0,0 };
vector<int> n2 = { 2,5,6 };
Solution s;
s.merge(n1, 3, n2, 3);
for (int i = 0; i < 6; i++) {
cout << n1[i] << endl;
}
return 0;
}
如果是要将2个有序数组合并成新的有序数组,稍作修改即可
#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:
int find_pos(vector<int> nums1, int t) {
int i = 0;
while (nums1[i] <= t && nums1[i]!=0) {
i++;
}
return i;
}
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
for (int i = 0; i < n; i++) {
//nums1.insert(nums1.begin() + m + i, nums2[i]);
int index = find_pos(nums1, nums2[i]);
nums1.insert(nums1.begin()+index, nums2[i]);
}
}
};
int main() {
vector<int> n1 = { 1,2,3,0,0,0 };
vector<int> n2 = { 2,5,6 };
Solution s;
s.merge(n1, 3, n2, 3);
for (int i = 0; i < 6; i++) {
cout << n1[i] << endl;
}
return 0;
}
注意第8行,当你查找n2第二个值5的位置,你会发现n1没有比5大的了,最后while循环得到的i已经超出n1数组的范围了,结果也不是你想要的。
这里就多加一个判断把第一个0作为结尾的位置。
#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:
vector<int>::iterator find_pos(vector<int> nums1, int t) {
int i = 0;
while (nums1[i] <= t) {
i++;
}
return nums1.begin() + i;
}
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
for (int i = 0; i < n; i++) {
nums1.insert(nums1.begin() + m + i, nums2[i]);
}
}
};
int main() {
vector<int> n1 = { 1,2,3,0,0,0 };
vector<int> n2 = { 2,5,6 };
Solution s;
s.merge(n1, 3, n2, 3);
for (int i = 0; i < 6; i++) {
cout << n1[i] << endl;
}
return 0;
}
只是要合并2个数组的话,这里用不上find_pos。
改了一下第18行的代码,供你参考。
还有问题可以评论问我或者私信。