题目如:
读题读了挺长时间的…
意思是在第二行的数组中找从第四行第一个数和第二个数之间存不存在第三个数
我刚开始的思路就是进行遍历嘛,直接暴力解法,上代码:
得了15分,满分25分,原因是对于一部分case超时啦
于是看了下评论部分的讲解,掌握了一种新方法,虽然以前也用过,类似于map(存键值对的数据结构)但是很多面试不支持用ES6。所以只能用数组模拟map
讲解:将喜好值作为数组的下标,把具有相同喜好值位置的下标加到数组中
自己实现了一遍:
var userNums = parseInt(readline());
var userLike = [];
var userLike1 = readline().split(' ');
for (let i = 0; i < userNums; i++) {
userLike.push(parseInt(userLike1[i]));
}
//构建类似于map的数组
//arr=[,[0],[1],[2,3], ,[4]]代表值为下标的元素出现在了哪些位置
var arr = [];
for (let j = 0; j < userNums; j++) {
if (arr[userLike[j]] == undefined) {
arr[userLike[j]] = [];
}
arr[userLike[j]].push(j);
}
//开始查找
var zushu = parseInt(readline());
for (var q = 0; q < zushu; q++) {
var line = readline().split(' ');
var l = parseInt(line[0]);
var r = parseInt(line[1]);
var k = parseInt(line[2]);
var res = 0;
if (arr[k] == undefined) {//注意这里一定不要忘记!很有可能k值在没有出现在原数组中
print(0);
} else {
for (let n = 0; n < arr[k].length; n++) {
if (arr[k][n] >= l - 1 && arr[k][n] <= r - 1) {
res++;
}
}
print(res);
}
}