fork download
  1. #include <stdio.h>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6.  
  7. class Solution {
  8. public:
  9. int firstMissingPositive(vector<int>& nums) {
  10.  
  11. for (int i = 0; i < nums.size(); i++) {
  12. if (nums[i] <= 0) {
  13. nums[i] = -1;
  14. }
  15. }
  16. nums.push_back(-1);
  17.  
  18. printf("Before ");
  19. printv(nums);
  20. printf("\n");
  21.  
  22. for (int i = 0; i < nums.size(); i++) {
  23.  
  24.  
  25. int start = nums[i];
  26. while (start > 0 && start < nums.size()){
  27. int newStart = nums[start];
  28. nums[start] = 0;
  29. if (newStart == start) {
  30. break;
  31. }
  32. start = newStart;
  33. }
  34.  
  35. printf("After i %d --- ", i);
  36. printv(nums);
  37. }
  38.  
  39. printf("\nAfter");
  40. printv(nums);
  41.  
  42. for (int i = 1; i < nums.size(); i++) {
  43. if (nums[i] == 0) {
  44. return i;
  45. }
  46. }
  47.  
  48. return nums.size();
  49. }
  50.  
  51. void printv(vector<int>& nums) {
  52. for (int i = 0; i < nums.size(); i++)
  53. printf("%d, ", nums[i]);
  54. printf("\n");
  55. }
  56. };
  57.  
  58. int main() {
  59. vector<int> a = {3,4,-1,1};
  60. Solution *s = new Solution();
  61.  
  62. printf("val is %d", s->firstMissingPositive(a));
  63. }
Success #stdin #stdout 0s 15232KB
stdin
Standard input is empty
stdout
Before 3, 4, -1, 1, -1, 

After i 0 --- 3, 0, -1, 0, 0, 
After i 1 --- 3, 0, -1, 0, 0, 
After i 2 --- 3, 0, -1, 0, 0, 
After i 3 --- 3, 0, -1, 0, 0, 
After i 4 --- 3, 0, -1, 0, 0, 

After3, 0, -1, 0, 0, 
val is 1