返回
Two Sum:轻松搞定数组求和问题
前端
2023-11-25 16:52:00
嗨,大家好!今天,我将带领大家踏上 LeetCode 1 Two Sum 的解题之旅。在这个简单难度的经典问题中,我们旨在从一个整数数组中找出两数之和为指定目标值的索引。
SEO 关键词
算法拆解
Two Sum 算法背后的思想非常简单。我们遍历数组,将每个元素与其他所有元素进行比较,检查它们的总和是否等于目标值。如果找到一对符合要求的元素,我们就返回它们的索引。
然而,这种朴素的方法时间复杂度为 O(n^2),对于大型数组来说效率低下。因此,我们需要一个更有效的解决方案。
哈希表法
一种更优化的解决方案是使用哈希表。哈希表是一种数据结构,它将键值对存储在数组中,以便快速查找。
我们在哈希表中存储每个元素及其索引。然后,遍历数组时,对于每个元素,我们检查哈希表中是否存在 target - element。如果存在,则表示我们找到了另一半。
这种方法的时间复杂度为 O(n),比朴素方法大幅提升。
代码实现
以下是使用哈希表法的 Python、Java 和 C++ 代码实现:
Python
def twoSum(nums, target):
hashtable = {}
for i, num in enumerate(nums):
complement = target - num
if complement in hashtable:
return [hashtable[complement], i]
hashtable[num] = i
Java
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> hashtable = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
int complement = target - nums[i];
if (hashtable.containsKey(complement)) {
return new int[] { hashtable.get(complement), i };
}
hashtable.put(nums[i], i);
}
return new int[0];
}
C++
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> hashtable;
for (int i = 0; i < nums.size(); i++) {
int complement = target - nums[i];
if (hashtable.count(complement)) {
return { hashtable[complement], i };
}
hashtable[nums[i]] = i;
}
return {};
}
总结
Two Sum 问题是编程面试中常见的问题。通过使用哈希表法,我们可以有效地解决这个问题,时间复杂度为 O(n)。希望这篇文章能够帮助您深入理解算法并提高您的编程技能。