返回
初战leetcode,手把手教你用JavaScript解决两数之和(Two Sum)
前端
2023-12-22 15:11:17
为了提高职业能力,我开始挑战leetcode的刷题之旅。leetcode是一个在线算法练习平台,汇聚了众多算法和数据结构题目,非常适合程序员提升技能。今天,我们就从第一题“两数之和(Two Sum)”开始。
题目
给你一个整数数组nums和一个目标值target。请你在该数组中找出和为目标值的那两个整数,并返回它们的索引。你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。
示例:
twoSum([2, 7, 11, 15], 9); // [0, 1]
twoSum([3, 2, 4], 6); // [1, 2]
方法一:暴力破解法
最直接的解决方法是暴力破解法。我们可以使用两个循环,一个循环遍历数组中的每个元素,另一个循环遍历数组中的其他元素,并检查它们是否满足和为目标值的要求。如果满足,则返回它们的索引。
const twoSum = (nums, target) => {
for (let i = 0; i < nums.length; i++) {
for (let j = i + 1; j < nums.length; j++) {
if (nums[i] + nums[j] === target) {
return [i, j];
}
}
}
return null;
};
方法二:哈希表法
哈希表法是一种更高效的解决方法。我们可以使用哈希表来存储数组中的每个元素及其索引。然后,对于每个元素,我们可以查找哈希表中是否存在一个元素与之相加等于目标值。如果存在,则返回它们的索引。
const twoSum = (nums, target) => {
const hashTable = {};
for (let i = 0; i < nums.length; i++) {
const complement = target - nums[i];
if (hashTable[complement] !== undefined) {
return [hashTable[complement], i];
}
hashTable[nums[i]] = i;
}
return null;
};
方法三:双指针法
双指针法是一种更简洁的解决方法。我们可以使用两个指针,一个指向数组的开头,另一个指向数组的结尾。然后,我们比较这两个指针指向的元素之和是否等于目标值。如果等于,则返回它们的索引。如果不等于,则移动这两个指针,直到找到满足条件的元素。
const twoSum = (nums, target) => {
let left = 0;
let right = nums.length - 1;
while (left < right) {
const sum = nums[left] + nums[right];
if (sum === target) {
return [left, right];
} else if (sum < target) {
left++;
} else {
right--;
}
}
return null;
};
总结
以上三种方法都可以解决“两数之和(Two Sum)”这个问题。暴力破解法最简单,但效率最低。哈希表法和双指针法都更有效率,但双指针法更加简洁。根据你的具体需求,你可以选择使用哪种方法。
加油,希望这篇文章对你有帮助!祝你leetcode刷题之旅顺利,早日成为一名优秀的前端工程师!