返回

Two Sum:轻松搞定数组求和问题

前端

嗨,大家好!今天,我将带领大家踏上 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)。希望这篇文章能够帮助您深入理解算法并提高您的编程技能。