力扣解题思路------第一题.两数之和

这道题目是力扣(LeetCode)上非常经典的一道题目,题目要求在给定数组中找到两个数,使得它们的和等于特定的目标值(target)。下面是一个详细的解题思路,包括一个时间复杂度为 O(n) 的算法。

解题思路

  1. 理解问题

    • 需要在数组 nums 中找到两个数,它们的和等于 target
    • 数组中的每个元素只能使用一次。
  2. 使用哈希表

    • 创建一个哈希表(在 Python 中为字典),用于存储遍历过程中遇到的每个数字及其索引。
    • 哈希表的键为数组中的元素值,值为该元素的索引。
  3. 遍历数组

    • 遍历数组 nums,对于每个元素 num
      • 计算 complement,即 target - num,这是我们需要找到的另一个数。
      • 检查 complement 是否已经在哈希表中:
        • 如果在,说明我们找到了两个数,它们的和为 target,返回这两个数的索引。
        • 如果不在,将当前元素 num 及其索引存入哈希表。
  4. 处理特殊情况

    • 如果数组中存在重复元素,需要确保不会重复使用同一个元素。
  5. 代码实现

    • 使用 Python 语言,可以简洁地实现上述逻辑。

Python 代码示例

 

python

def two_sum(nums, target):
    num_to_index = {}  # 创建哈希表
    for index, num in enumerate(nums):
        complement = target - num  # 计算需要的另一个数
        if complement in num_to_index:  # 检查哈希表中是否存在这个数
            return [num_to_index[complement], index]  # 返回两个数的索引
        num_to_index[num] = index  # 将当前数和索引存入哈希表
    return []  # 如果没有找到,返回空列表

# 示例测试
print(two_sum([2, 7, 11, 15], 9))  # 输出: [0, 1]
print(two_sum([3, 2, 4], 6))       # 输出: [1, 2]
print(two_sum([3, 3], 6))          # 输出: [0, 1]

进阶思考

  • 时间复杂度:上述算法的时间复杂度为 O(n),因为我们只遍历了数组一次,并且哈希表的查找操作平均时间复杂度为 O(1)。
  • 空间复杂度:空间复杂度为 O(n),因为最坏情况下,我们可能需要将所有元素存储在哈希表中。

这个算法有效地解决了问题,并且满足了题目中对时间复杂度的要求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值