HackerRank Js-Week1 4. Breaking the Records

    HackerRank

    Maria plays college basketball and wants to go pro. Each season she maintains a record of her play. She tabulates the number of times she breaks her season record for most points and least points in a game. Points scored in the first game establish her record for the season, and she begins counting from there.

    Maria 在大學打籃球時想要成為職業的球員,每一個賽季他都會保存他的比賽紀錄。
    他列出了他在一場比賽中打破賽季最高分和最低分的紀錄次數。
    從第一場比賽中的得分開始計算。
    

    Returns
    int[2]: An array with the numbers of times she broke her records. Index 0 is for breaking most points records, and index 1 is for breaking least points records.

    #重點
    回傳一個陣列包含她打破紀錄的這些次數。
    陣列中第 0 個位置是她打破最高分的紀錄,陣列中第 1 個位置是打破最低分的紀錄。
    

    Example 1:

    scores = [12, 24, 10, 24]
    

    solution:
    先假設 scores 陣列中第 0 個位置的數值為基準點,並以 maxCount 與 minCount 作為打破最高、最低分的次數紀錄。
    運用 for 迴圈遍歷 scores 陣列中的元素,判斷高於基準點則 maxCount += 1,低於基準點則 minCount += 1,
    同時更新 maximum 與 minimum 的分數,並將打破次數放入陣列中後回傳。

    Code 1: BigO(n)

    'use strict';
    
    const fs = require('fs');
    
    process.stdin.resume();
    process.stdin.setEncoding('utf-8');
    
    let inputString = '';
    let currentLine = 0;
    
    process.stdin.on('data', function(inputStdin) {
        inputString += inputStdin;
    });
    
    process.stdin.on('end', function() {
        inputString = inputString.split('\n');
    
        main();
    });
    
    function readLine() {
        return inputString[currentLine++];
    }
    
    /*
     * Complete the 'breakingRecords' function below.
     *
     * The function is expected to return an INTEGER_ARRAY.
     * The function accepts INTEGER_ARRAY scores as parameter.
     */
    
    function breakingRecords(scores) {
        // Write your code here
        let maximum = scores[0],
            minimum = scores[0],
            maxCount = 0,
            minCount = 0
        
        for (let i = 0; i < scores.length; i++) {
            if (scores[i] > maximum) {
                maximum = scores[i]
                maxCount += 1
            } else if (scores[i] < minimum) {
                minimum = scores[i]
                minCount += 1
            }
        }
        return [maxCount, minCount];
    }
    
    function main() {
        const ws = fs.createWriteStream(process.env.OUTPUT_PATH);
    
        const n = parseInt(readLine().trim(), 10);
    
        const scores = readLine().replace(/\s+$/g, '').split(' ').map(scoresTemp => parseInt(scoresTemp, 10));
    
        const result = breakingRecords(scores);
    
        ws.write(result.join(' ') + '\n');
    
        ws.end();
    }
    

    FlowChart:
    Example 1

    scores = [12, 24, 10, 24]
    scores[0] = 12
    
    // scores[0] = 12
    Maximum = 12, Minimum = 12, maxCount = 0, minCount = 0
    // scores[1] = 24
    Maximum = 24, Minimum = 12, maxCount = 1, minCount = 0
    // scores[2] = 10
    Maximum = 24, Minimum = 10, maxCount = 1, minCount = 1
    // scores[3] = 24
    Maximum = 24, Minimum = 10, maxCount = 1, minCount = 1
    
    return [maxCount, minCount]; //[1, 1]