fork(3) download
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. int find_missing(std::vector<int>& v)
  5. {
  6. for (std::size_t i = 0; i != v.size(); ++i) {
  7.  
  8. std::size_t e = i;
  9.  
  10. while (0 < v[e]
  11. && std::size_t(v[e]) <= v.size()
  12. && std::size_t(v[e]) != e + 1
  13. && v[e] != v[v[e] - 1]
  14. ) {
  15. std::swap(v[e], v[v[e] - 1]);
  16. }
  17. }
  18. for (std::size_t i = 0; i != v.size(); ++i) {
  19. if (std::size_t(v[i]) != i + 1) {
  20. return i + 1;
  21. }
  22. }
  23. return v.size();
  24. }
  25.  
  26. int main()
  27. {
  28. std::vector<int> v = {3, 4, -1, 1};
  29. std::cout << find_missing(v) << std::endl;
  30. v = {1, 2, 0};
  31. std::cout << find_missing(v) << std::endl;
  32. v = {2, 2, 2};
  33. std::cout << find_missing(v) << std::endl;
  34. }
  35.  
Success #stdin #stdout 0s 4488KB
stdin
Standard input is empty
stdout
2
3
1