You are given N counters, initially set to 0, and you have two possible operations on them:
- increase(X) − counter X is increased by 1,
- max counter − all counters are set to the maximum value of any counter.
A non-empty array A of M integers is given. This array represents consecutive operations:
- if A[K] = X, such that 1 ≤ X ≤ N, then operation K is increase(X),
- if A[K] = N + 1 then operation K is max counter.
For example, given integer N = 5 and array A such that:
A[0] = 3 A[1] = 4 A[2] = 4 A[3] = 6 A[4] = 1 A[5] = 4 A[6] = 4the values of the counters after each consecutive operation will be:
(0, 0, 1, 0, 0) (0, 0, 1, 1, 0) (0, 0, 1, 2, 0) (2, 2, 2, 2, 2) (3, 2, 2, 2, 2) (3, 2, 2, 3, 2) (3, 2, 2, 4, 2)The goal is to calculate the value of every counter after all operations.
Write a function:
class Solution { public int[] solution(int N, int[] A); }
that, given an integer N and a non-empty array A consisting of M integers, returns a sequence of integers representing the values of the counters.
Result array should be returned as an array of integers.
For example, given:
A[0] = 3 A[1] = 4 A[2] = 4 A[3] = 6 A[4] = 1 A[5] = 4 A[6] = 4the function should return [3, 2, 2, 4, 2], as explained above.
Write an efficient algorithm for the following assumptions:
- N and M are integers within the range [1..100,000];
- each element of array A is an integer within the range [1..N + 1].
class Solution {
    public int[] solution(int N, int[] A) {
        int [] cntArr = new int[N];
        int max = 0;
        for(int i=0; i<A.length; i++){
            if(A[i] == N+1){
                for(int j=0;j<cntArr.length; j++){
                    cntArr[j] = max;
                }
            }else{
                cntArr[A[i]-1]++;
                if( max < cntArr[A[i]-1] )
                    max = cntArr[A[i]-1];
            }
        }
        return cntArr;
    }
}class Solution {
    public int[] solution(int N, int[] A) {
        int [] cntArr = new int[N];
        int max = 0;
        for(int i=0; i<A.length; i++){
            if(A[i] == N+1){
                for(int j=0;j<cntArr.length; j++){
                    cntArr[j] = max;
                }
            }else{
                cntArr[A[i]-1]++;
                if( max < cntArr[A[i]-1] )
                    max = cntArr[A[i]-1];
            }
        }
        return cntArr;
    }
}class Solution {
    public int[] solution(int N, int[] A) {
        int [] cntArr = new int[N];
        int max = 0;
        for(int i=0; i<A.length; i++){
            if(A[i] == N+1){
                for(int j=0;j<cntArr.length; j++){
                    cntArr[j] = max;
                }
            }else{
                cntArr[A[i]-1]++;
                if( max < cntArr[A[i]-1] )
                    max = cntArr[A[i]-1];
            }
        }
        return cntArr;
    }
}class Solution {
    public int[] solution(int N, int[] A) {
        int [] cntArr = new int[N];
        int max = 0;
        for(int i=0; i<A.length; i++){
            if(A[i] == N+1){
                for(int j=0;j<cntArr.length; j++){
                    cntArr[j] = max;
                }
            }else{
                cntArr[A[i]-1]++;
                if( max < cntArr[A[i]-1] )
                    max = cntArr[A[i]-1];
            }
        }
        return cntArr;
    }
}[5, [3, 4, 4, 6, 1, 6, 4]]
class Solution {
    public int[] solution(int N, int[] A) {
        int [] cntArr = new int[N];
        int max = 0;
        for(int i=0; i<A.length; i++){
            if(A[i] == N+1){
                for(int j=0;j<cntArr.length; j++){
                    cntArr[j] = max;
                }
            }else{
                cntArr[A[i]-1]++;
                if( max < cntArr[A[i]-1] )
                    max = cntArr[A[i]-1];
            }
            
        }
        return cntArr;
    }
}class Solution {
    public int[] solution(int N, int[] A) {
        int [] cntArr = new int[N];
        int max = 0;
        for(int i=0; i<A.length; i++){
            if(A[i] == N+1){
                for(int j=0;j<cntArr.length; j++){
                    cntArr[j] = max;
                }
            }else{
                cntArr[A[i]-1]++;
                if( max < cntArr[A[i]-1] )
                    max = cntArr[A[i]-1];
            }
            System.out.print();
        }
        return cntArr;
    }
}class Solution {
    public int[] solution(int N, int[] A) {
        int [] cntArr = new int[N];
        int max = 0;
        for(int i=0; i<A.length; i++){
            if(A[i] == N+1){
                for(int j=0;j<cntArr.length; j++){
                    cntArr[j] = max;
                }
            }else{
                cntArr[A[i]-1]++;
                if( max < cntArr[A[i]-1] )
                    max = cntArr[A[i]-1];
            }
            for(int k=0;k<)
            System.out.print();
        }
        return cntArr;
    }
}class Solution {
    public int[] solution(int N, int[] A) {
        int [] cntArr = new int[N];
        int max = 0;
        for(int i=0; i<A.length; i++){
            if(A[i] == N+1){
                for(int j=0;j<cntArr.length; j++){
                    cntArr[j] = max;
                }
            }else{
                cntArr[A[i]-1]++;
                if( max < cntArr[A[i]-1] )
                    max = cntArr[A[i]-1];
            }
            for(int k=0;k<cntArr.length;K++){
                System.out.print();
            }
        }
        return cntArr;
    }
}class Solution {
    public int[] solution(int N, int[] A) {
        int [] cntArr = new int[N];
        int max = 0;
        for(int i=0; i<A.length; i++){
            if(A[i] == N+1){
                for(int j=0;j<cntArr.length; j++){
                    cntArr[j] = max;
                }
            }else{
                cntArr[A[i]-1]++;
                if( max < cntArr[A[i]-1] )
                    max = cntArr[A[i]-1];
            }
            for(int k=0;k<cntArr.length;K++){
                System.out.print(cntArr[k] + " ");
            }
        }
        return cntArr;
    }
}class Solution {
    public int[] solution(int N, int[] A) {
        int [] cntArr = new int[N];
        int max = 0;
        for(int i=0; i<A.length; i++){
            if(A[i] == N+1){
                for(int j=0;j<cntArr.length; j++){
                    cntArr[j] = max;
                }
            }else{
                cntArr[A[i]-1]++;
                if( max < cntArr[A[i]-1] )
                    max = cntArr[A[i]-1];
            }
            for(int k=0;k<cntArr.length;K++){
                System.out.print(cntArr[k] + " ");
            }
        }
        return cntArr;
    }
}Solution.java:16: error: cannot find symbol
            for(int k=0;k<cntArr.length;K++){
                                        ^
  symbol:   variable K
  location: class Solution
1 error
  
          
            
          
        
      class Solution {
    public int[] solution(int N, int[] A) {
        int [] cntArr = new int[N];
        int max = 0;
        for(int i=0; i<A.length; i++){
            if(A[i] == N+1){
                for(int j=0;j<cntArr.length; j++){
                    cntArr[j] = max;
                }
            }else{
                cntArr[A[i]-1]++;
                if( max < cntArr[A[i]-1] )
                    max = cntArr[A[i]-1];
            }
            for(int k=0;k<cntArr.length;k++){
                System.out.print(cntArr[k] + " ");
            }
        }
        return cntArr;
    }
}0 0 1 0 0 0 0 1 1 0 0 0 1 2 0 2 2 2 2 2 3 2 2 2 2 3 2 2 3 2 3 2 2 4 2
function result: [3, 3, 3, 4, 3]
0 0 1 0 0 0 0 1 1 0 0 0 1 2 0 2 2 2 2 2 3 2 2 2 2 3 3 3 3 3 3 3 3 4 3
[5, [3, 4, 4, 6, 1, 6, 4]]
class Solution {
    public int[] solution(int N, int[] A) {
        int [] cntArr = new int[N];
        int max = 0;
        for(int i=0; i<A.length; i++){
            if(A[i] == N+1){
                for(int j=0;j<cntArr.length; j++){
                    cntArr[j] = max;
                }
            }else{
                cntArr[A[i]-1]++;
                if( max < cntArr[A[i]-1] )
                    max = cntArr[A[i]-1];
            }
            for(int k=0;k<cntArr.length;k++){
                System.out.print(cntArr[k] + " ");
            }
            System.out.print(cntArr[k] + " ");
        }
        return cntArr;
    }
}class Solution {
    public int[] solution(int N, int[] A) {
        int [] cntArr = new int[N];
        int max = 0;
        for(int i=0; i<A.length; i++){
            if(A[i] == N+1){
                for(int j=0;j<cntArr.length; j++){
                    cntArr[j] = max;
                }
            }else{
                cntArr[A[i]-1]++;
                if( max < cntArr[A[i]-1] )
                    max = cntArr[A[i]-1];
            }
            for(int k=0;k<cntArr.length;k++){
                System.out.print(cntArr[k] + " ");
            }
            System.out.println("");
        }
        return cntArr;
    }
}0 0 1 0 0 0 0 1 1 0 0 0 1 2 0 2 2 2 2 2 3 2 2 2 2 3 2 2 3 2 3 2 2 4 2
function result: [3, 3, 3, 4, 3]
0 0 1 0 0 0 0 1 1 0 0 0 1 2 0 2 2 2 2 2 3 2 2 2 2 3 3 3 3 3 3 3 3 4 3
[5, [3, 4, 4, 6, 1, 6, 4]]
class Solution {
    public int[] solution(int N, int[] A) {
        int [] cntArr = new int[N];
        int max = 0;
        int
        for(int i=0; i<A.length; i++){
            if(A[i] == N+1){
                for(int j=0;j<cntArr.length; j++){
                    cntArr[j] = max;
                }
            }else{
                cntArr[A[i]-1]++;
                if( max < cntArr[A[i]-1] )
                    max = cntArr[A[i]-1];
            }
            for(int k=0;k<cntArr.length;k++){
                System.out.print(cntArr[k] + " ");
            }
            System.out.println("");
        }
        return cntArr;
    }
}class Solution {
    public int[] solution(int N, int[] A) {
        int [] cntArr = new int[N];
        int max = 0;
        int tmpMAx = 0;
        for(int i=0; i<A.length; i++){
            if(A[i] == N+1){
                for(int j=0;j<cntArr.length; j++){
                    cntArr[j] = max;
                }
            }else{
                cntArr[A[i]-1]++;
                if( max < cntArr[A[i]-1] )
                    max = cntArr[A[i]-1];
            }
            for(int k=0;k<cntArr.length;k++){
                System.out.print(cntArr[k] + " ");
            }
            System.out.println("");
        }
        return cntArr;
    }
}class Solution {
    public int[] solution(int N, int[] A) {
        int [] cntArr = new int[N];
        int max = 0;
        int tmpMAx = 0;
        for(int i=0; i<A.length; i++){
            if(A[i] == N+1){
                tmpMax = max;
            }else{
                cntArr[A[i]-1]++;
                if( max < cntArr[A[i]-1] )
                    max = cntArr[A[i]-1];
            }
            for(int k=0;k<cntArr.length;k++){
                System.out.print(cntArr[k] + " ");
            }
            System.out.println("");
        }
        return cntArr;
    }
}class Solution {
    public int[] solution(int N, int[] A) {
        int [] cntArr = new int[N];
        int max = 0;
        int tmpMax = 0;
        for(int i=0; i<A.length; i++){
            if(A[i] == N+1){
                tmpMax = max;
            }else{
                cntArr[A[i]-1]++;
                if( max < cntArr[A[i]-1] )
                    max = cntArr[A[i]-1];
            }
            for(int k=0;k<cntArr.length;k++){
                System.out.print(cntArr[k] + " ");
            }
            System.out.println("");
        }
        return cntArr;
    }
}class Solution {
    public int[] solution(int N, int[] A) {
        int [] cntArr = new int[N];
        int max = 0;
        int tmpMax = 0;
        int tmp = 0;
        for(int i=0; i<A.length; i++){
            if(A[i] == N+1){
                tmpMax = max;
            }else{
                tmp = cntArr[A[i]-1]++;
                if( max < cntArr[A[i]-1] )
                    max = cntArr[A[i]-1];
            }
            for(int k=0;k<cntArr.length;k++){
                System.out.print(cntArr[k] + " ");
            }
            System.out.println("");
        }
        return cntArr;
    }
}class Solution {
    public int[] solution(int N, int[] A) {
        int [] cntArr = new int[N];
        int max = 0;
        int tmpMax = 0;
        int tmp = 0;
        for(int i=0; i<A.length; i++){
            if(A[i] == N+1){
                tmpMax = max;
            }else{
                tmp = tmpMax + cntArr[A[i]-1]++;
                if( max < cntArr[A[i]-1] )
                    max = cntArr[A[i]-1];
            }
            for(int k=0;k<cntArr.length;k++){
                System.out.print(cntArr[k] + " ");
            }
            System.out.println("");
        }
        return cntArr;
    }
}class Solution {
    public int[] solution(int N, int[] A) {
        int [] cntArr = new int[N];
        int max = 0;
        int tmpMax = 0;
        int tmp = 0;
        for(int i=0; i<A.length; i++){
            if(A[i] == N+1){
                tmpMax = max;
            }else{
                cntArr[A[i]-1] = tmpMax + cntArr[A[i]-1]++;
                if( max < cntArr[A[i]-1] )
                    max = cntArr[A[i]-1];
            }
            for(int k=0;k<cntArr.length;k++){
                System.out.print(cntArr[k] + " ");
            }
            System.out.println("");
        }
        return cntArr;
    }
}class Solution {
    public int[] solution(int N, int[] A) {
        int [] cntArr = new int[N];
        int max = 0;
        int tmpMax = 0;
        int tmp = 0;
        for(int i=0; i<A.length; i++){
            if(A[i] == N+1){
                tmpMax = max;
            }else{
                cntArr[A[i]-1] = tmpMax + 1;
                if( max < cntArr[A[i]-1] )
                    max = cntArr[A[i]-1];
            }
            for(int k=0;k<cntArr.length;k++){
                System.out.print(cntArr[k] + " ");
            }
            System.out.println("");
        }
        return cntArr;
    }
}class Solution {
    public int[] solution(int N, int[] A) {
        int [] cntArr = new int[N];
        int max = 0;
        int tmpMax = 0;
        int tmp = 0;
        for(int i=0; i<A.length; i++){
            if(A[i] == N+1){
                tmpMax = max;
            }else{
                cntArr[A[i]-1] = tmpMax + 1;
                if( max < cntArr[A[i]-1] )
                    max = cntArr[A[i]-1];
            }
            for(int k=0;k<cntArr.length;k++){
                System.out.print(cntArr[k] + " ");
            }
            System.out.println("");
        }
        return cntArr;
    }
}0 0 1 0 0 0 0 1 1 0 0 0 1 1 0 0 0 1 1 0 2 0 1 1 0 2 0 1 2 0 2 0 1 2 0
function result: [2, 0, 1, 3, 0]
0 0 1 0 0 0 0 1 1 0 0 0 1 1 0 0 0 1 1 0 2 0 1 1 0 2 0 1 1 0 2 0 1 3 0
[5, [3, 4, 4, 6, 1, 6, 4]]
class Solution {
    public int[] solution(int N, int[] A) {
        int [] cntArr = new int[N];
        int max = 0;
        int tmpMax = 0;
        int tmp = 0;
        for(int i=0; i<A.length; i++){
            if(A[i] == N+1){
                tmpMax = max+;
            }else{
                cntArr[A[i]-1] = tmpMax + 1;
                if( max < cntArr[A[i]-1] )
                    max = cntArr[A[i]-1];
            }
            for(int k=0;k<cntArr.length;k++){
                System.out.print(cntArr[k] + " ");
            }
            System.out.println("");
        }
        return cntArr;
    }
}class Solution {
    public int[] solution(int N, int[] A) {
        int [] cntArr = new int[N];
        int max = 0;
        int tmpMax = 0;
        int tmp = 0;
        for(int i=0; i<A.length; i++){
            if(A[i] == N+1){
                tmpMax = max+1;
            }else{
                cntArr[A[i]-1] = tmpMax + 1;
                if( max < cntArr[A[i]-1] )
                    max = cntArr[A[i]-1];
            }
            for(int k=0;k<cntArr.length;k++){
                System.out.print(cntArr[k] + " ");
            }
            System.out.println("");
        }
        return cntArr;
    }
}0 0 1 0 0 0 0 1 1 0 0 0 1 1 0 0 0 1 1 0 3 0 1 1 0 3 0 1 3 0 3 0 1 3 0
function result: [3, 0, 1, 5, 0]
0 0 1 0 0 0 0 1 1 0 0 0 1 1 0 0 0 1 1 0 3 0 1 1 0 3 0 1 1 0 3 0 1 5 0
[5, [3, 4, 4, 6, 1, 6, 4]]
class Solution {
    public int[] solution(int N, int[] A) {
        int [] cntArr = new int[N];
        int max = 0;
        int tmpMax = 0;
        int tmp = 0;
        for(int i=0; i<A.length; i++){
            if(A[i] == N+1){
                tmpMax = max+1;
            }else{
                
                cntArr[A[i]-1] = tmpMax + 1;
                if( max < cntArr[A[i]-1] )
                    max = cntArr[A[i]-1];
            }
            for(int k=0;k<cntArr.length;k++){
                System.out.print(cntArr[k] + " ");
            }
            System.out.println("");
        }
        return cntArr;
    }
}class Solution {
    public int[] solution(int N, int[] A) {
        int [] cntArr = new int[N];
        int max = 0;
        int tmpMax = 0;
        int tmp = 0;
        for(int i=0; i<A.length; i++){
            if(A[i] == N+1){
                tmpMax = max+1;
            }else{
                if( tmpMax < max ){
                }else{
                    cntArr[A[i]-1] = tmpMax + 1;
                }
                
                if( max < cntArr[A[i]-1] )
                    max = cntArr[A[i]-1];
            }
            for(int k=0;k<cntArr.length;k++){
                System.out.print(cntArr[k] + " ");
            }
            System.out.println("");
        }
        return cntArr;
    }
}class Solution {
    public int[] solution(int N, int[] A) {
        int [] cntArr = new int[N];
        int max = 0;
        int tmpMax = 0;
        int tmp = 0;
        for(int i=0; i<A.length; i++){
            if(A[i] == N+1){
                tmpMax = max+1;
            }else{
                if( tmpMax < max ){
                    cntArr[A[i]-1] = max + 1;
                }else{
                    cntArr[A[i]-1] = tmpMax + 1;
                }
                
                if( max < cntArr[A[i]-1] )
                    max = cntArr[A[i]-1];
            }
            for(int k=0;k<cntArr.length;k++){
                System.out.print(cntArr[k] + " ");
            }
            System.out.println("");
        }
        return cntArr;
    }
}0 0 1 0 0 0 0 1 2 0 0 0 1 3 0 0 0 1 3 0 5 0 1 3 0 5 0 1 6 0 5 0 1 7 0
function result: [5, 0, 1, 7, 0]
0 0 1 0 0 0 0 1 2 0 0 0 1 3 0 0 0 1 3 0 5 0 1 3 0 5 0 1 3 0 5 0 1 7 0
[5, [3, 4, 4, 6, 1, 6, 4]]
class Solution {
    public int[] solution(int N, int[] A) {
        int [] cntArr = new int[N];
        int max = 0;
        int tmpMax = 0;
        int tmp = 0;
        for(int i=0; i<A.length; i++){
            if(A[i] == N+1){
                tmpMax = max+1;
            }else{
                
                    cntArr[A[i]-1] = tmpMax + 1;
                
                
                if( max < cntArr[A[i]-1] )
                    max = cntArr[A[i]-1];
            }
            for(int k=0;k<cntArr.length;k++){
                System.out.print(cntArr[k] + " ");
            }
            System.out.println("");
        }
        return cntArr;
    }
}class Solution {
    public int[] solution(int N, int[] A) {
        int [] cntArr = new int[N];
        int max = 0;
        int tmpMax = 0;
        int tmp = 0;
        for(int i=0; i<A.length; i++){
            if(A[i] == N+1){
                tmpMax = max+1;
            }else{
                cntArr[A[i]-1] = tmpMax + 1;
                                
                if( max < cntArr[A[i]-1] )
                    max = cntArr[A[i]-1];
            }
            for(int k=0;k<cntArr.length;k++){
                System.out.print(cntArr[k] + " ");
            }
            System.out.println("");
        }
        return cntArr;
    }
}0 0 1 0 0 0 0 1 1 0 0 0 1 1 0 0 0 1 1 0 3 0 1 1 0 3 0 1 3 0 3 0 1 3 0
function result: [3, 0, 1, 5, 0]
0 0 1 0 0 0 0 1 1 0 0 0 1 1 0 0 0 1 1 0 3 0 1 1 0 3 0 1 1 0 3 0 1 5 0
[5, [3, 4, 4, 6, 1, 6, 4]]
class Solution {
    public int[] solution(int N, int[] A) {
        int [] cntArr = new int[N];
        int max = 0;
        int tmpMax = 0;
        int tmp = 0;
        for(int i=0; i<A.length; i++){
            if(A[i] == N+1){
                tmpMax = max+1;
            }else{
                
                cntArr[A[i]-1] = tmpMax + 1;
                                
                if( max < cntArr[A[i]-1] )
                    max = cntArr[A[i]-1];
            }
            for(int k=0;k<cntArr.length;k++){
                System.out.print(cntArr[k] + " ");
            }
            System.out.println("");
        }
        return cntArr;
    }
}class Solution {
    public int[] solution(int N, int[] A) {
        int [] cntArr = new int[N];
        int max = 0;
        int tmpMax = 0;
        int tmp = 0;
        for(int i=0; i<A.length; i++){
            if(A[i] == N+1){
                tmpMax = max+1;
            }else{
                if( tmpMax < max ){
                    cntArr[A[i]-1] = 1;
                }else{
                    cntArr[A[i]-1] = tmpMax + 1;
                }
                
                if( max < cntArr[A[i]-1] )
                    max = cntArr[A[i]-1];
            }
            for(int k=0;k<cntArr.length;k++){
                System.out.print(cntArr[k] + " ");
            }
            System.out.println("");
        }
        return cntArr;
    }
}class Solution {
    public int[] solution(int N, int[] A) {
        int [] cntArr = new int[N];
        int max = 0;
        int tmpMax = 0;
        int tmp = 0;
        for(int i=0; i<A.length; i++){
            if(A[i] == N+1){
                tmpMax = max+1;
            }else{
                if( tmpMax < cntArr[A[i]-1] ){
                    cntArr[A[i]-1] = 1;
                }else{
                    cntArr[A[i]-1] = tmpMax + 1;
                }
                
                if( max < cntArr[A[i]-1] )
                    max = cntArr[A[i]-1];
            }
            for(int k=0;k<cntArr.length;k++){
                System.out.print(cntArr[k] + " ");
            }
            System.out.println("");
        }
        return cntArr;
    }
}class Solution {
    public int[] solution(int N, int[] A) {
        int [] cntArr = new int[N];
        int max = 0;
        int tmpMax = 0;
        int tmp = 0;
        for(int i=0; i<A.length; i++){
            if(A[i] == N+1){
                tmpMax = max+1;
            }else{
                if( tmpMax < cntArr[A[i]-1] ){
                    cntArr[A[i]-1] = 1;
                }else{
                    cntArr[A[i]-1] = tmpMax + 1;
                }
                
                if( max < cntArr[A[i]-1] )
                    max = cntArr[A[i]-1];
            }
            for(int k=0;k<cntArr.length;k++){
                System.out.print(cntArr[k] + " ");
            }
            System.out.println("");
        }
        return cntArr;
    }
}0 0 1 0 0 0 0 1 1 0 0 0 1 1 0 0 0 1 1 0 3 0 1 1 0 3 0 1 3 0 3 0 1 1 0
function result: [3, 0, 1, 5, 0]
0 0 1 0 0 0 0 1 1 0 0 0 1 1 0 0 0 1 1 0 3 0 1 1 0 3 0 1 1 0 3 0 1 5 0
[5, [3, 4, 4, 6, 1, 6, 4]]
class Solution {
    public int[] solution(int N, int[] A) {
        int [] cntArr = new int[N];
        int max = 0;
        int tmpMax = 0;
        int tmp = 0;
        for(int i=0; i<A.length; i++){
            if(A[i] == N+1){
                tmpMax = max+1;
            }else{
                if( tmpMax < cntArr[A[i]-1] ){
                    cntArr[A[i]-1]++;
                }else{
                    cntArr[A[i]-1] = tmpMax + 1;
                }
                
                if( max < cntArr[A[i]-1] )
                    max = cntArr[A[i]-1];
            }
            for(int k=0;k<cntArr.length;k++){
                System.out.print(cntArr[k] + " ");
            }
            System.out.println("");
        }
        return cntArr;
    }
}0 0 1 0 0 0 0 1 1 0 0 0 1 2 0 0 0 1 2 0 4 0 1 2 0 4 0 1 4 0 4 0 1 5 0
function result: [4, 0, 1, 6, 0]
0 0 1 0 0 0 0 1 1 0 0 0 1 2 0 0 0 1 2 0 4 0 1 2 0 4 0 1 2 0 4 0 1 6 0
[5, [3, 4, 4, 6, 1, 6, 4]]
class Solution {
    public int[] solution(int N, int[] A) {
        int [] cntArr = new int[N];
        int max = 0;
        int tmpMax = 0;
        int tmp = 0;
        for(int i=0; i<A.length; i++){
            if(A[i] == N+1){
                tmpMax = max;
            }else{
                if( tmpMax < cntArr[A[i]-1] ){
                    cntArr[A[i]-1]++;
                }else{
                    cntArr[A[i]-1] = tmpMax + 1;
                }
                
                if( max < cntArr[A[i]-1] )
                    max = cntArr[A[i]-1];
            }
            for(int k=0;k<cntArr.length;k++){
                System.out.print(cntArr[k] + " ");
            }
            System.out.println("");
        }
        return cntArr;
    }
}class Solution {
    public int[] solution(int N, int[] A) {
        int [] cntArr = new int[N];
        int max = 0;
        int tmpMax = 0;
        int tmp = 0;
        for(int i=0; i<A.length; i++){
            if(A[i] == N+1){
                tmpMax = max;
            }else{
                if( tmpMax < cntArr[A[i]-1] ){
                    cntArr[A[i]-1]++;
                }else{
                    cntArr[A[i]-1] = tmpMax + 1;
                }
                
                if( max < cntArr[A[i]-1] )
                    max = cntArr[A[i]-1];
            }
            for(int k=0;k<cntArr.length;k++){
                System.out.print(cntArr[k] + " ");
            }
            System.out.println("");
        }
        return cntArr;
    }
}0 0 1 0 0 0 0 1 1 0 0 0 1 2 0 0 0 1 2 0 3 0 1 2 0 3 0 1 3 0 3 0 1 4 0
function result: [3, 0, 1, 4, 0]
0 0 1 0 0 0 0 1 1 0 0 0 1 2 0 0 0 1 2 0 3 0 1 2 0 3 0 1 2 0 3 0 1 4 0
[5, [3, 4, 4, 6, 1, 6, 4]]
class Solution {
    public int[] solution(int N, int[] A) {
        int [] cntArr = new int[N];
        int max = 0;
        int tmpMax = 0;
        int tmp = 0;
        for(int i=0; i<A.length; i++){
            if(A[i] == N+1){
                tmpMax = max;
            }else{
                if( tmpMax < cntArr[A[i]-1] ){
                    cntArr[A[i]-1]++;
                }else{
                    cntArr[A[i]-1] = tmpMax + 1;
                }
                
                if( max < cntArr[A[i]-1] )
                    max = cntArr[A[i]-1];
            }
            for(int k=0;k<cntArr.length;k++){
                System.out.print(cntArr[k] + " ");
            }
            System.out.println("");
        }
        for()
        return cntArr;
    }
}class Solution {
    public int[] solution(int N, int[] A) {
        int [] cntArr = new int[N];
        int max = 0;
        int tmpMax = 0;
        int tmp = 0;
        for(int i=0; i<A.length; i++){
            if(A[i] == N+1){
                tmpMax = max;
            }else{
                if( tmpMax < cntArr[A[i]-1] ){
                    cntArr[A[i]-1]++;
                }else{
                    cntArr[A[i]-1] = tmpMax + 1;
                }
                
                if( max < cntArr[A[i]-1] )
                    max = cntArr[A[i]-1];
            }
            for(int k=0;k<cntArr.length;k++){
                System.out.print(cntArr[k] + " ");
            }
            System.out.println("");
        }
        for(int i=0;i<cntArr.length;i++){
            if(cntArr[i])
        }
        return cntArr;
    }
}class Solution {
    public int[] solution(int N, int[] A) {
        int [] cntArr = new int[N];
        int max = 0;
        int tmpMax = 0;
        int tmp = 0;
        for(int i=0; i<A.length; i++){
            if(A[i] == N+1){
                tmpMax = max;
            }else{
                if( tmpMax < cntArr[A[i]-1] ){
                    cntArr[A[i]-1]++;
                }else{
                    cntArr[A[i]-1] = tmpMax + 1;
                }
                
                if( max < cntArr[A[i]-1] )
                    max = cntArr[A[i]-1];
            }
            for(int k=0;k<cntArr.length;k++){
                System.out.print(cntArr[k] + " ");
            }
            System.out.println("");
        }
        for(int i=0;i<cntArr.length;i++){
            if(cntArr[i] < tmpMax){
                cntArr[i] = tmpMax;
            }
        }
        return cntArr;
    }
}class Solution {
    public int[] solution(int N, int[] A) {
        int [] cntArr = new int[N];
        int max = 0;
        int tmpMax = 0;
        int tmp = 0;
        for(int i=0; i<A.length; i++){
            if(A[i] == N+1){
                tmpMax = max;
            }else{
                if( tmpMax < cntArr[A[i]-1] ){
                    cntArr[A[i]-1]++;
                }else{
                    cntArr[A[i]-1] = tmpMax + 1;
                }
                
                if( max < cntArr[A[i]-1] )
                    max = cntArr[A[i]-1];
            }
            for(int k=0;k<cntArr.length;k++){
                System.out.print(cntArr[k] + " ");
            }
            System.out.println("");
        }
        for(int i=0;i<cntArr.length;i++){
            if(cntArr[i] < tmpMax){
                cntArr[i] = tmpMax;
            }
        }
        return cntArr;
    }
}0 0 1 0 0 0 0 1 1 0 0 0 1 2 0 0 0 1 2 0 3 0 1 2 0 3 0 1 3 0 3 0 1 4 0
function result: [3, 3, 3, 4, 3]
0 0 1 0 0 0 0 1 1 0 0 0 1 2 0 0 0 1 2 0 3 0 1 2 0 3 0 1 2 0 3 0 1 4 0
[5, [3, 4, 4, 6, 1, 6, 4]]
class Solution {
    public int[] solution(int N, int[] A) {
        int [] cntArr = new int[N];
        int max = 0;
        int tmpMax = 0;
        int tmp = 0;
        for(int i=0; i<A.length; i++){
            if(A[i] == N+1){
                tmpMax = max;
            }else{
                if( tmpMax < cntArr[A[i]-1] ){
                    cntArr[A[i]-1]++;
                }else{
                    cntArr[A[i]-1] = tmpMax + 1;
                }
                
                if( max < cntArr[A[i]-1] )
                    max = cntArr[A[i]-1];
            }
            
        }
        for(int i=0;i<cntArr.length;i++){
            if(cntArr[i] < tmpMax){
                cntArr[i] = tmpMax;
            }
        }
        return cntArr;
    }
}class Solution {
    public int[] solution(int N, int[] A) {
        int [] cntArr = new int[N];
        int max = 0;
        int tmpMax = 0;
        int tmp = 0;
        for(int i=0; i<A.length; i++){
            if(A[i] == N+1){
                tmpMax = max;
            }else{
                if( tmpMax < cntArr[A[i]-1] ){
                    cntArr[A[i]-1]++;
                }else{
                    cntArr[A[i]-1] = tmpMax + 1;
                }
                
                if( max < cntArr[A[i]-1] )
                    max = cntArr[A[i]-1];
            }
        }
        for(int i=0;i<cntArr.length;i++){
            if(cntArr[i] < tmpMax){
                cntArr[i] = tmpMax;
            }
        }
        return cntArr;
    }
}[5, [3, 4, 4, 6, 1, 6, 4]]
class Solution {
    public int[] solution(int N, int[] A) {
        int [] cntArr = new int[N];
        int max = 0;
        int tmpMax = 0;
        int tmp = 0;
        for(int i=0; i<A.length; i++){
            if(A[i] == N+1){
                tmpMax = max;
            }else{
                if( tmpMax < cntArr[A[i]-1] ){
                    cntArr[A[i]-1]++;
                }else{
                    cntArr[A[i]-1] = tmpMax + 1;
                }
                
                if( max < cntArr[A[i]-1] )
                    max = cntArr[A[i]-1];
            }
        }
        for(int i=0;i<cntArr.length;i++){
            if(cntArr[i] < tmpMax){
                cntArr[i] = tmpMax;
            }
        }
        return cntArr;
    }
}The solution obtained perfect score.