C ++ 14,178个176 174 155 142 135字节
服从
#include<list>
#include<algorithm>
[](auto&l){auto e=end(l),b=begin(l);l.size()^count(b,e,*b)?++*min_element(b,e):(l.push_back(1),0);};
调用
std::list<int> s = {4, 4, 9, 4};
//invoke like this
auto i = [](auto&l){auto e=end(l),b=begin(l);l.size()^count(b,e,*b)?++*min_element(b,e):(l.push_back(1),0);};
i(s);
//or like that
[](auto&l){auto e=end(l),b=begin(l);l.size()^count(b,e,*b)?++*min_element(b,e):(l.push_back(1),0);}(s);
不打高尔夫球
#include <list>
#include <algorithm>
#include <iostream>
using namespace std;
void i(list<int>& l) {
auto e = l.end(), b = l.begin();
if (l.size() == count(b, e, l.front())) {
l.push_back(1);
} else {
++*min_element(b, e);
}
}
int main() {
list<int> s = {4, 4, 9, 4};
//invoke like this
i(s);
for (auto o:s)
std::cout << o << ' ';
std::cout << std::endl;
}
这是我第一次打高尔夫球,感谢您的帮助。
编辑:忘记提及您必须至少编译 -std=c++11
-std=c++14
EDIT2:我意识到我可以省略包含中的空格 #include <list>
EDIT3:通过更换挽救了两个多字节l.begin()
由begin(l)
EDIT4:由于@Quentin,又节省了19(!)字节(请参阅他的评论)
EDIT5:Quentin减少了13个字节,谢谢!
EDIT6:正如TuukkaX指出的那样,未命名的lambda /函数就足够了,因此我删除auto i=
了bytecount中的