这道题也是上次面试百度之后,对当时的算法题答的不好的原因进行了反思,因为上次的那道题不能用枚举的方法,不是说枚举的方法不对,是因为数据量一旦很大的话,算法的耗时是比较严重的,时间复杂度大大增加。
利用哈希表
哈希表的查找效率远远的高于其他数据结构,而ES6恰好新增了一种数据结构map,能够很好的模拟哈希表,方法当然还是遍历数组,只不过这次是将遍历的当前元素与目标元素进行做差,存入哈希表,如此进行,如果下次遍历到的元素做差后和哈希表中的数重复,那么这两个数就是符合要求的数啦。因此,代码如下:
function findIndex(nums,target){
let hash=new Map();
for(let i=0;i<nums.length;i++){
let cur=target-nums[i];
if(!hash.has(cur)){
hash.set(nums[i],i);
}else{
return new Array(hash.get(cur),i);
}
}
}
module.export={
findIndex:findIndex
}