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:
function solution(N, 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].
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(N, A) {
const counters = new Array(N).fill(0);
const M = A.length;
let max = 0;
for (let i = 0; i < M; i++) {
const current = A[i];
if (current <= N) {
counters[current - 1]++;
if (counters[current - 1] > max) {
max = counters[current - 1];
}
} else {
for (let j = 0; j < N; j++) {
counters[j] = max;
}
}
}
return counters;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(N, A) {
const counters = new Array(N).fill(0);
const M = A.length;
let max = 0;
for (let i = 0; i < M; i++) {
const current = A[i];
if (current <= N) {
counters[current - 1]++;
if (counters[current - 1] > max) {
max = counters[current - 1];
}
} else {
for (let j = 0; j < N; j++) {
counters[j] = max;
}
}
}
return counters;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(N, A) {
const counters = new Array(N).fill(0);
const M = A.length;
let max = 0;
let last
for (let i = 0; i < M; i++) {
const current = A[i];
if (current <= N) {
counters[current - 1]++;
if (counters[current - 1] > max) {
max = counters[current - 1];
}
} else {
for (let j = 0; j < N; j++) {
counters[j] = max;
}
}
}
return counters;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(N, A) {
const counters = new Array(N).fill(0);
const M = A.length;
let max = 0;
let lastMaxIndex = 0;
for (let i = 0; i < M; i++) {
const current = A[i];
if (current <= N) {
counters[current - 1]++;
if (counters[current - 1] > max) {
max = counters[current - 1];
}
} else {
lastMaxIndex = i;
}
}
return counters;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(N, A) {
const counters = new Array(N).fill(0);
const M = A.length;
let max = 0;
let lastMaxIndex = 0;
for (let i = 0; i < M; i++) {
const current = A[i];
if (current <= N) {
if ()
counters[current - 1]++;
if (counters[current - 1] > max) {
max = counters[current - 1];
}
} else {
lastMaxIndex = i;
}
}
return counters;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(N, A) {
const counters = new Array(N).fill(0);
const M = A.length;
let max = 0;
let lastMaxIndex = 0;
for (let i = 0; i < M; i++) {
const current = A[i];
const currentCounter = counters[current - 1];
if (current <= N) {
if (currentCounter < lastMaxIndex) {
}
++;
if (counters[current - 1] > max) {
max = counters[current - 1];
}
} else {
lastMaxIndex = i;
}
}
return counters;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(N, A) {
const counters = new Array(N).fill(0);
const M = A.length;
let max = 0;
let lastMaxIndex = 0;
for (let i = 0; i < M; i++) {
const current = A[i];
const currentCounter = counters[current - 1];
if (current <= N) {
if (currentCounter < max) {
}
++;
if (counters[current - 1] > max) {
max = counters[current - 1];
}
} else {
lastMaxIndex = i;
}
}
return counters;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(N, A) {
const counters = new Array(N).fill(0);
const M = A.length;
let max = 0;
let lastMaxIndex = 0;
for (let i = 0; i < M; i++) {
const current = A[i];
const currentCounter = counters[current - 1];
if (current <= N) {
if (currentCounter < max) {
}
} else {
lastMaxIndex = i;
}
}
return counters;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(N, A) {
const counters = new Array(N).fill(0);
const M = A.length;
let max = 0;
let lastMaxIndex = 0;
for (let i = 0; i < M; i++) {
const current = A[i];
const currentCounter = counters[current - 1];
if (current <= N) {
if (currentCounter < max) {
}
} else {
lastMaxIndex = ;
}
}
return counters;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(N, A) {
const counters = new Array(N).fill(0);
const M = A.length;
let max = 0;
let lastMaxIndex = 0;
for (let i = 0; i < M; i++) {
const current = A[i];
const currentCounter = counters[current - 1];
if (current <= N) {
if (currentCounter < max) {
}
++;
if (counters[current - 1] > max) {
max = counters[current - 1];
}
} else {
lastMaxIndex = i;
}
}
return counters;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(N, A) {
const counters = new Array(N).fill(0);
const M = A.length;
let max = 0;
for (let i = 0; i < M; i++) {
const current = A[i];
const currentCounter = counters[current - 1];
if (current <= N) {
if (currentCounter < max) {
}
++;
if (counters[current - 1] > max) {
max = counters[current - 1];
}
}
}
return counters;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(N, A) {
const counters = new Array(N).fill(0);
const M = A.length;
let max = 0;
for (let i = 0; i < M; i++) {
const current = A[i];
const currentCounter = counters[current - 1];
if (current <= N) {
if (currentCounter < max) {
}
++;
if (counters[current - 1] > max) {
max = counters[current - 1];
}
} else {
}
}
return counters;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(N, A) {
const counters = new Array(N).fill(0);
const M = A.length;
let max = 0;
for (let i = 0; i < M; i++) {
const current = A[i];
const currentCounter = counters[current - 1];
if (current <= N) {
counters[current - 1] = currentCounter + 1;
if (counters[current - 1] > max) {
max = counters[current - 1];
}
} else {
if (currentCounter < max) {
}
}
}
return counters;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(N, A) {
const counters = new Array(N).fill(0);
const M = A.length;
let max = 0;
for (let i = 0; i < M; i++) {
const current = A[i];
const currentCounter = counters[current - 1];
if (current <= N) {
if
counters[current - 1] = currentCounter + 1;
if (counters[current - 1] > max) {
max = counters[current - 1];
}
} else {
if (currentCounter < max) {
}
}
}
return counters;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(N, A) {
const counters = new Array(N).fill(0);
const M = A.length;
let max = 0;
for (let i = 0; i < M; i++) {
const current = A[i];
const currentCounter = counters[current - 1];
if (current <= N) {
if (currentCounter < max) {
}
counters[current - 1] = currentCounter + 1;
if (counters[current - 1] > max) {
max = counters[current - 1];
}
} else {
if (currentCounter < max) {
}
}
}
return counters;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(N, A) {
const counters = new Array(N).fill(0);
const M = A.length;
let max = 0;
for (let i = 0; i < M; i++) {
const current = A[i];
const currentCounter = counters[current - 1];
if (current <= N) {
if (currentCounter < max) {
counters[current - 1] = max
}
counters[current - 1] = currentCounter + 1;
if (counters[current - 1] > max) {
max = counters[current - 1];
}
} else {
if (currentCounter < max) {
}
}
}
return counters;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(N, A) {
const counters = new Array(N).fill(0);
const M = A.length;
let max = 0;
let lastMaxCounter = 0;
for (let i = 0; i < M; i++) {
const current = A[i];
const currentCounter = counters[current - 1];
if (current <= N) {
if (currentCounter < max) {
counters[current - 1] = max
}
counters[current - 1] = currentCounter + 1;
if (counters[current - 1] > max) {
max = counters[current - 1];
}
} else {
if (currentCounter < max) {
}
}
}
return counters;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(N, A) {
const counters = new Array(N).fill(0);
const M = A.length;
let max = 0;
let lastMaxCounter = 0;
for (let i = 0; i < M; i++) {
const current = A[i];
const currentCounter = counters[current - 1];
if (current <= N) {
if (currentCounter < max) {
counters[current - 1] = max
}
counters[current - 1] = currentCounter + 1;
if (counters[current - 1] > max) {
max = counters[current - 1];
}
} else {
lastMaxCounter = max;
}
}
return counters;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(N, A) {
const counters = new Array(N).fill(0);
const M = A.length;
let max = 0;
let lastMaxCounter = 0;
for (let i = 0; i < M; i++) {
const current = A[i];
const currentCounter = counters[current - 1];
if (current <= N) {
if (currentCounter < lastMaxCounter) {
counters[current - 1] = lastMaxCounter + 1;
}
counters[current - 1] = currentCounter + 1;
if (counters[current - 1] > max) {
max = counters[current - 1];
}
} else {
lastMaxCounter = max;
}
}
for (let i = 0; i < N; i++) {
if (counters[i] < )
}
return counters;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(N, A) {
const counters = new Array(N).fill(0);
const M = A.length;
let max = 0;
let lastMaxCounter = 0;
for (let i = 0; i < M; i++) {
const current = A[i];
const currentCounter = counters[current - 1];
if (current <= N) {
if (currentCounter < lastMaxCounter) {
counters[current - 1] = lastMaxCounter + 1;
}
counters[current - 1] = currentCounter + 1;
if (counters[current - 1] > max) {
max = counters[current - 1];
}
} else {
lastMaxCounter = max;
}
}
for (let i = 0; i < N; i++) {
if (counters[i] < lastMaxCounter) {
counters[i] = lastMaxCounter;
}
}
return counters;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(N, A) {
const counters = new Array(N).fill(0);
const M = A.length;
let max = 0;
let lastMaxCounter = 0;
for (let i = 0; i < M; i++) {
const current = A[i];
const currentCounter = counters[current - 1];
if (current <= N) {
if (currentCounter < lastMaxCounter) {
counters[current - 1] = lastMaxCounter + 1;
} else {
}
counters[current - 1] = currentCounter + 1;
if (counters[current - 1] > max) {
max = counters[current - 1];
}
} else {
lastMaxCounter = max;
}
}
for (let i = 0; i < N; i++) {
if (counters[i] < lastMaxCounter) {
counters[i] = lastMaxCounter;
}
}
return counters;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(N, A) {
const counters = new Array(N).fill(0);
const M = A.length;
let max = 0;
let lastMaxCounter = 0;
for (let i = 0; i < M; i++) {
const current = A[i];
const currentCounter = counters[current - 1];
if (current <= N) {
if (currentCounter < lastMaxCounter) {
counters[current - 1] = lastMaxCounter + 1;
} else {
counters[current - 1] = currentCounter + 1;
}
if (counters[current - 1] > max) {
max = counters[current - 1];
}
} else {
lastMaxCounter = max;
}
}
for (let i = 0; i < N; i++) {
if (counters[i] < lastMaxCounter) {
counters[i] = lastMaxCounter;
}
}
return counters;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(N, A) {
const counters = new Array(N).fill(0);
const M = A.length;
let curmax = 0;
let lastMaxCounter = 0;
for (let i = 0; i < M; i++) {
const current = A[i];
const currentCounter = counters[current - 1];
if (current <= N) {
if (currentCounter < lastMaxCounter) {
counters[current - 1] = lastMaxCounter + 1;
} else {
counters[current - 1] = currentCounter + 1;
}
if (counters[current - 1] > max) {
max = counters[current - 1];
}
} else {
lastMaxCounter = max;
}
}
for (let i = 0; i < N; i++) {
if (counters[i] < lastMaxCounter) {
counters[i] = lastMaxCounter;
}
}
return counters;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(N, A) {
const counters = new Array(N).fill(0);
const M = A.length;
let currentMax = 0;
let lastMaxCounter = 0;
for (let i = 0; i < M; i++) {
const current = A[i];
const currentCounter = counters[current - 1];
if (current <= N) {
if (currentCounter < lastMaxCounter) {
counters[current - 1] = lastMaxCounter + 1;
} else {
counters[current - 1] = currentCounter + 1;
}
if (counters[current - 1] > max) {
max = counters[current - 1];
}
} else {
lastMaxCounter = max;
}
}
for (let i = 0; i < N; i++) {
if (counters[i] < lastMaxCounter) {
counters[i] = lastMaxCounter;
}
}
return counters;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(N, A) {
const counters = new Array(N).fill(0);
const M = A.length;
let currentMax = 0;
let lastMaxCounter = 0;
for (let i = 0; i < M; i++) {
const current = A[i];
const currentCounter = counters[current - 1];
if (current <= N) {
if (currentCounter < lastMaxCounter) {
counters[current - 1] = lastMaxCounter + 1;
} else {
counters[current - 1] = currentCounter + 1;
}
if (counters[current - 1] > currentMax) {
currentMax = counters[current - 1];
}
} else {
lastMaxCounter = currentMax;
}
}
for (let i = 0; i < N; i++) {
if (counters[i] < lastMaxCounter) {
counters[i] = lastMaxCounter;
}
}
return counters;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(N, A) {
const counters = new Array(N).fill(0);
const M = A.length;
let currentMax = 0;
let lastMaxCounter = 0;
for (let i = 0; i < M; i++) {
const current = A[i];
const currentCounter = counters[current - 1];
if (current <= N) {
if (currentCounter < lastMaxCounter) {
counters[current - 1] = lastMaxCounter + 1;
} else {
counters[current - 1] = currentCounter + 1;
}
if (counters[current - 1] > currentMax) {
currentMax = counters[current - 1];
}
} else {
lastMaxCounter = currentMax;
}
}
for (let i = 0; i < N; i++) {
if (counters[i] < lastMaxCounter) {
counters[i] = lastMaxCounter;
}
}
return counters;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(N, A) {
const counters = new Array(N).fill(0);
const M = A.length;
let currentMax = 0;
let lastMaxCounter = 0;
for (let i = 0; i < M; i++) {
const current = A[i];
const currentCounter = counters[current - 1];
if (current <= N) {
if (currentCounter < lastMaxCounter) {
counters[current - 1] = lastMaxCounter + 1;
} else {
counters[current - 1] = currentCounter + 1;
}
if (counters[current - 1] > currentMax) {
currentMax = counters[current - 1];
}
} else {
lastMaxCounter = currentMax;
}
}
for (let i = 0; i < N; i++) {
if (counters[i] < lastMaxCounter) {
counters[i] = lastMaxCounter;
}
}
return counters;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(N, A) {
const counters = new Array(N).fill(0);
const M = A.length;
let currentMax = 0;
let lastMaxCounter = 0;
for (let i = 0; i < M; i++) {
const current = A[i];
const currentCounter = counters[current - 1];
if (current <= N) {
if (currentCounter < lastMaxCounter) {
counters[current - 1] = lastMaxCounter + 1;
} else {
counters[current - 1] = currentCounter + 1;
}
if (counters[current - 1] > currentMax) {
currentMax = counters[current - 1];
}
} else {
lastMaxCounter = currentMax;
}
}
for (let i = 0; i < N; i++) {
if (counters[i] < lastMaxCounter) {
counters[i] = lastMaxCounter;
}
}
return counters;
}
The solution obtained perfect score.