我知道在这一特定问题上还有很多类似的问题,但是我有一个解决方案适用于所有 EXCEPT 测试用例(超时)。无论如何,我可以使我的代码运行得更快或更高效吗?还是需要从头开始?
我的逻辑:
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
答案 0 :(得分:0)
任务在“词典和哈希图”类别中。代替数据和频率数组,创建对象时,键为数据值,键为频率。不用使用indexOf
的{{1}},而是使用O(n)
frequenciesMap[queries[i][1]]