Advertisement
imashutosh51

Duplicate Zeros

Aug 11th, 2022 (edited)
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.36 KB | None | 0 0
  1. c// class Solution {
  2. // public:
  3. //     void duplicateZeros(vector<int>& arr) {
  4. //         vector <int> dup;
  5. //         for(int i=0;i<arr.size();i++){
  6. //             dup.push_back(arr[i]);
  7. //         }
  8. //         int i=0,k=0;
  9. //         for(int i=0;i<arr.size() && k<arr.size();i++){
  10. //             if(dup[i]==0){arr[k++]=0;
  11. //                           if(k<arr.size())
  12. //                              arr[k++]=0;}
  13. //             else arr[k++]=dup[i];
  14. //         }
  15.        
  16. //     }
  17. // };
  18.  
  19. /*
  20.  T.C O(n) two pass, space complexity O(1)
  21.  Logic:
  22.  We can find that what are the elments will be inside array after modification.
  23.  so found the last index of element which will be present in array after first
  24.  loop.
  25.  
  26. [8,4,5,0,0,0,0,7]   example of k>arr.size()
  27. */
  28.  
  29. class Solution {
  30. public:
  31.     void duplicateZeros(vector<int>& arr){
  32.         int k=0,i=0;
  33.         for(i=0;i<arr.size();i++){
  34.             if(arr[i]==0) k+=2;
  35.             else k++;
  36.             if(k>=arr.size()) break;
  37.         }
  38.         int j=arr.size()-1;
  39.         if(k>arr.size()){     //If k is more than arr.size() means last element is 0 and it should be in
  40.              arr[j--]=arr[i--];  //array only one time at the last position.
  41.         }
  42.         for(i;i>=0;i--){
  43.             if(arr[i]==0){ arr[j--]=arr[i]; arr[j--]=arr[i];}
  44.             else arr[j--]=arr[i];
  45.         }
  46.  
  47.     }
  48. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement