我希望你能担任高级前端开发员。出一道js编程题并给出答案
题目:给定一个整数数组和一个目标值,找到数组中两个数的和等于目标值,返回这两个数的下标,要求时间复杂度为O(n)。
示例输入:[2, 7, 11, 15], 9
示例输出:[0, 1]
解释:数组中下标为0和1的数相加等于目标值9。
答案:
function twoSum(nums, target) {
const map = new Map();
for (let i = 0; i < nums.length; i++) {
const complement = target - nums[i];
if (map.has(complement)) {
return [map.get(complement), i];
}
map.set(nums[i], i);
}
return [];
}
console.log(twoSum([2, 7, 11, 15], 9)); // [0, 1]
解析:使用哈希表,遍历数组,将数组元素和下标存储到哈希表中。对于每个元素,计算出目标值和当前元素的差值,如果差值在哈希表中存在,则返回这两个数的下标。如果不存在,则将当前元素和下标存入哈希表中,继续遍历。时间复杂度为O(n)。
原文地址: https://www.cveoy.top/t/topic/5Fk 著作权归作者所有。请勿转载和采集!