maze-runnar / interview-preparation-kit

Interview preparation kit of hackerrank solutions
https://maze-runnar.github.io/interview-preparation-kit/
MIT License
190 stars 75 forks source link

Partial correct solution for Array Manipulation JS implementation #80

Closed championballer closed 4 years ago

championballer commented 4 years ago

The following code is giving a runtime error for the Array Manipulation, but passing for 75% test cases. Can anyone proficient in JS help debug this. Thanks.

'use strict';

const fs = require('fs');

process.stdin.resume();
process.stdin.setEncoding('utf-8');

let inputString = '';
let currentLine = 0;

process.stdin.on('data', inputStdin => {
    inputString += inputStdin;
});

process.stdin.on('end', _ => {
    inputString = inputString.replace(/\s*$/, '')
        .split('\n')
        .map(str => str.replace(/\s*$/, ''));

    main();
});

function readLine() {
    return inputString[currentLine++];
}

// Complete the arrayManipulation function below.
function arrayManipulation(n, queries) {
    let max=0;
    let val=0;
    let values = Array.apply(null, Array(n)).map(function (x, i) { return 0; });
    let m = queries.length;
    let query = Array.apply(null, Array(3)).map(function (x, i) { return 0; });
    let a;
    let b;
    let k;

    for(let i=0; i<m; i++){
        query = queries[i];
        a = query[0];
        b = query[1];
        k = query[2];
        values[a-1]+=k;
        if(b<n) values[b]-=k;
    }
    for(let j=0; j<n; j++){
        val+=values[j];
        if(val > max) max = val;
    }
    return max;

}

function main() {
    const ws = fs.createWriteStream(process.env.OUTPUT_PATH);

    const nm = readLine().split(' ');

    const n = parseInt(nm[0], 10);

    const m = parseInt(nm[1], 10);

    let queries = Array(m);

    for (let i = 0; i < m; i++) {
        queries[i] = readLine().split(' ').map(queriesTemp => parseInt(queriesTemp, 10));
    }

    let result = arrayManipulation(n, queries);

    ws.write(result + "\n");

    ws.end();
}
amitYadavDev commented 4 years ago

@championballer var arr = []; var max = 0; for (let l = 0; l < n; l++) { arr[l] = 0; } for (let i = 0; i < queries.length; i++) { arr[queries[i][0]-1] += queries[i][2]; if (queries[i][1] < arr.length) { arr[queries[i][1]] -= queries[i][2]; } } for (let j = 1; j < n; j++) { arr[j] += arr[j-1]; } for (let k = 0; k < arr.length; k++) { max = Math.max(max, arr[k]); } return max;

championballer commented 4 years ago

Looks good. You want to create a PR for the same? Just change all var to let

amitYadavDev commented 4 years ago

Sir @championballer now u can close it.

championballer commented 4 years ago

99 solves this.