Hackerrank:频率查询超时

时间:2019-08-08 19:17:19

标签: javascript

我知道在这一特定问题上还有很多类似的问题,但是我有一个解决方案适用于所有 EXCEPT 测试用例(超时)。无论如何,我可以使我的代码运行得更快或更高效吗?还是需要从头开始?

我的逻辑:

  • 我创建了三个数组。
  • 只要有新值,就将其添加到数据数组中。同时,我在频率阵列中添加了“ 1”。位置应该相同。
  • 只要它是相同的值,我只需将对应值的频率值增加1。
  • 每当我需要返回一个值来说明我的数组是否具有频率为“ _”的值时,我就对我的频率和tada进行indexOf运算,如果存在,则返回0,否则返回1。
function freqQuery(queries) {
    var answer = new Array(),
        data = new Array(),
        frequency = new Array();

    for (var i = 0; i < queries.length; i++){
        var test = queries[i][0];
        if (test == 1) { // first test
            var place = data.indexOf(queries[i][1]);
            if (place == -1){
                data.push(queries[i][1]);
                frequency.push(1);
            } else {
                frequency[place]++;
            }

        } else if (test == 2) { // second test
            var place = data.indexOf(queries[i][1]);
            if ((place != -1) && (frequency[place] > 0)) {
                frequency[place]--;
            }

        } else if (test == 3) { // third test
            if (frequency.indexOf(queries[i][1]) == -1) {
                answer.push(0);
            } else {
                answer.push(1);
            }
        }
    }

    return answer;
}

链接:Hackerrank

1 个答案:

答案 0 :(得分:0)

任务在“词典和哈希图”类别中。代替数据和频率数组,创建对象时,键为数据值,键为频率。不用使用indexOf的{​​{1}},而是使用O(n)

frequenciesMap[queries[i][1]]