学习笔记

65 阅读5分钟

以下是关于数组中两数之和问题的相关内容:

题目解析:

  • 题目:给定一个整数数组 nums 和一个目标值 target,在数组中找出两个数,使它们的和等于目标值,并返回这两个数的索引。例如,给定 nums = [2, 7, 11, 15]target = 9,则应返回 [0, 1],因为 2 + 7 = 9

  • 思路

    • 可以使用哈希表来解决此问题。遍历数组时,对于每个元素 nums[i],计算出另一个需要的数 complement = target - nums[i]
    • 检查这个 complement 是否已经在哈希表中。如果在,说明找到了满足条件的两个数,直接返回它们的索引。
    • 如果不在,就将当前元素 nums[i] 及其索引 i 存入哈希表中,继续遍历下一个元素。
  • 代码详解

收起

python

复制

def two_sum(nums, target):
    # 创建一个空的哈希表
    num_dict = {}
    for i, num in enumerate(nums):
        # 计算需要的数
        complement = target - num
        # 检查哈希表中是否存在需要的数
        if complement in num_dict:
            return [num_dict[complement], i]
        # 如果不存在,将当前数及其索引存入哈希表
        else:
            num_dict[num] = i

# 测试示例
nums = [2, 7, 11, 15]
target = 9
print(two_sum(nums, target))

在上述代码中,首先创建了一个空的哈希表 num_dict。然后使用 enumerate 函数遍历数组 nums,这样可以同时获取元素和其索引。对于每个元素 num,计算出 complement。如果 complement 在哈希表中,说明找到了满足条件的两个数,直接返回它们在哈希表中存储的索引和当前索引 i。如果不在,就将当前数 num 作为键,索引 i 作为值存入哈希表,以便后续查找。

知识总结:

  • 新知识点

    • 哈希表的应用场景。在这个问题中,哈希表用于快速查找一个数是否存在,将查找时间复杂度从  降低到 (平均情况)。
    • 数组遍历与哈希表操作的结合。通过一次遍历数组,同时进行哈希表的查找和插入操作,高效地解决问题。
  • 理解

    • 哈希表是一种非常高效的数据结构,它通过将键映射到特定的存储位置来实现快速查找。在两数之和问题中,利用了哈希表的这一特性,避免了使用暴力解法中的双重循环遍历,大大提高了算法的效率。
    • 数组遍历是处理数组问题的基本操作,而在此基础上结合哈希表的动态存储和查找功能,展示了如何灵活运用不同的数据结构来解决实际问题。
  • 学习建议

    • 对于入门同学,要先理解哈希表的基本概念和操作原理,比如如何插入键值对、如何根据键查找值等。可以通过手动构建简单的哈希表来加深理解,例如用一个列表来模拟哈希表,通过对元素进行某种计算来确定其在列表中的存储位置。

    • 在学习代码时,要注意 enumerate 函数的使用,它在很多需要同时获取元素和索引的场景中非常方便。同时,要理解在循环中哈希表的查找和插入操作的顺序和逻辑,多思考为什么这样写能够正确地找到满足条件的两个数。

    • 尝试修改代码,比如改变目标值,或者将问题扩展为找出所有满足条件的数对,通过这些修改来进一步熟悉哈希表在数组问题中的应用。

学习计划:

  • 制定刷题计划

    • 以数据结构和算法类型为单位制定计划。例如,先集中一周时间刷数组相关的题目,包括像两数之和这样的基础题,以及数组的排序、查找特定元素等题目。每天安排 1 - 2 小时,前半小时回顾前一天的错题和相关知识点,后 1 - 1.5 小时做新题。
    • 每周完成一个类型后,进行一次总结和小测试,检查自己对该类型知识的掌握程度,然后再进入下一个类型,如链表、栈和队列等。
  • 利用错题进行针对性学习

    • 当出现错题时,仔细分析错误原因。如果是对哈希表概念理解不清导致的错误,重新复习哈希表的原理和常见操作方法,查看相关的教程或书籍章节。

    • 如果是代码实现细节错误,比如哈希表的键值设置错误或者循环边界条件错误,将错误代码与正确代码进行对比,逐行分析差异,理解正确代码的逻辑。

    • 把错题整理到错题本中,记录错误的题目描述、自己的错误答案、正确答案以及错误原因分析和知识点总结。定期回顾错题本,重新做错题,确保自己已经掌握。

工具运用:

  • 与在线教程结合

    • 在使用 MarsCode AI 刷题前,可以先在网上搜索相关知识点的在线教程,如在慕课网、网易云课堂等平台上查找数组和哈希表相关的课程视频,学习基本概念和常见用法。然后在刷题过程中,遇到问题时再回到教程中查找更深入的解释或示例。
    • 例如,对于哈希表的理解不够深入时,可以在慕课网上搜索哈希表的详细讲解课程,观看老师的演示和讲解,然后再回到 MarsCode AI 刷题平台继续做相关题目,将理论知识与实际操作相结合。
  • 与编程书籍配合

    • 选择一本经典的编程书籍,如《Python 核心编程》或《数据结构与算法分析:C++ 描述》等。在刷题时,如果对某个知识点或代码写法有疑问,查阅书籍中的相关章节。
    • 比如在做两数之和题目时,对哈希表的时间复杂度分析不确定,可以查阅书籍中关于数据结构时间复杂度分析的部分,加深理解,同时也可以从书籍中学习到更多关于数组和哈希表的拓展知识和应用案例,丰富自己的知识体系,以便更好地应对刷题过程中的各种问题。