MaxCounters


My code in C++11: 

#include <vector>
#include <memory.h>

using namespace std;

vector<int> solution(int N, vector<int> &A) {

   vector<int> counters(N);

   int max_val = 0;
   int max_val_tot = 0;

   auto increase = [&](vector<int> &v, size_t idx)
   {
      ++v[idx];

      if ( v[idx] > max_val )
         max_val = v[idx];
   };

   for ( size_t K = 0; K < A.size(); ++K )
   {
      auto value = A[K] - 1;
     
      if ( value >= 0 && value < N )
      {
         increase(counters, value);
      }
      else if ( value == N )
      {
         max_val_tot += max_val;
         max_val = 0;
         memset(counters.data(), 0, sizeof(int)*counters.size());
      }
   }

   
   if ( max_val_tot )
   {
      for ( size_t X = 0; X < N; ++X )
      {
         counters[X] += max_val_tot;
      }      
   }

   return counters;
}
Comments