回答編集履歴
1
追記
answer
CHANGED
@@ -29,4 +29,44 @@
|
|
29
29
|
for ( int item : result ) { std::cout << item << ' '; }
|
30
30
|
std::cout << std::endl;
|
31
31
|
}
|
32
|
+
```
|
33
|
+
[追記] 題意に沿ってみた。std::rotateだけは使わせてね♪
|
34
|
+
```C++
|
35
|
+
#include <iostream>
|
36
|
+
#include <vector>
|
37
|
+
#include <algorithm>
|
38
|
+
|
39
|
+
class Solution {
|
40
|
+
public:
|
41
|
+
void merge(std::vector<int>& nums1, int m, std::vector<int>& nums2, int n) {
|
42
|
+
std::vector<int>::iterator first1 = nums1.begin();
|
43
|
+
std::vector<int>::iterator last1 = first1 + m;
|
44
|
+
std::vector<int>::iterator first2 = nums2.begin();
|
45
|
+
std::vector<int>::iterator last2 = first2 + n;
|
46
|
+
// 両方要素があるうちは小さい方を積む
|
47
|
+
while ( first1 != last1 && first2 != last2 ) {
|
48
|
+
if ( *first1 < *first2 ) {
|
49
|
+
// 1側を積むのは"次へ進む"だけ
|
50
|
+
++first1;
|
51
|
+
} else {
|
52
|
+
// 2側を積むのはちょっと面倒、1側の末尾に積んでくるっと回転
|
53
|
+
*last1 = *first2++;
|
54
|
+
std::rotate(++first1, last1, last1+1);
|
55
|
+
++last1;
|
56
|
+
}
|
57
|
+
}
|
58
|
+
// 残った2側を全部積む
|
59
|
+
while( first2 != last2 ) { *last1++ = *first2++; }
|
60
|
+
}
|
61
|
+
};
|
62
|
+
|
63
|
+
int main() {
|
64
|
+
|
65
|
+
std::vector<int> nums1 = { 1, 2, 3, 0, 0, 0 };
|
66
|
+
std::vector<int> nums2 = { 2, 5, 6 };
|
67
|
+
Solution s;
|
68
|
+
s.merge(nums1, 3, nums2, 3);
|
69
|
+
for (int item : nums1 ) { std::cout << item << ' '; }
|
70
|
+
std::cout << std::endl;
|
71
|
+
}
|
32
72
|
```
|