?要求:
move_zeros({1, 0, 1, 2, 0, 1, 3}) // returns {1, 1, 2, 1, 3, 0, 0}
解法一:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
std::vector<int> move_zeroes(const std::vector<int>& input) {
vector<int> my_vec{ input };
int count = 0;
for (auto x : my_vec) {
if (x == 0)
count++;
}
my_vec.erase(remove(my_vec.begin(), my_vec.end(), 0), my_vec.end());
for (int i = 0; i < count; i++)
my_vec.push_back(0);
return my_vec;
}
解法二:
auto move_zeroe(std::vector<int> v) {
std::stable_partition(begin(v), end(v), [](auto x) {return x; });
return v;
}
这个解法使用了分组函数stable_partition() 函数,可以保证对指定区域内数据完成分组的同时,不改变各组内元素的相对位置。使用了lambda 表达式 ,同时利用了返回值0与非零的特点。
|