每天我都会接触不同类型的数据结构和算法。我学会了处理
一些问题涉及更复杂的结构,例如链表和二叉树,而其他问题则将矩阵/n维数组混合在一起,让我可以处理多维空间。
问题的多样性让我保持警惕。 LeetCode 的 30 天 JavaScript 轨道上的问题向我介绍了诸如
之类的基础知识LeetCode 的 Top Interview 150 轨道更进一步,让我在不同难度和方法的问题之间徘徊。每天至少解决其中一个问题是非常宝贵的。这些问题也促使我更频繁地思考优化以及不同的方法如何极大地影响运行时和内存效率。
除了这些挑战之外,我还学习了结构课程,以巩固我对关键概念的理解。我学习了更有效的方法来处理某些数据结构,例如链表和二叉树的部分。我特别欣赏该平台的动态教学方法,并以易于理解的方式分解问题。这是一个很好的平台,可以从非常基础的层面学习 DSA,然后将这种理解转化为我面临的其他编码问题。
随着时间的推移,我遇到了很多种解决方法、解决问题的技巧,例如
我发现两指针方法是解决涉及序列(主要是数组和字符串)的问题的一种简单而强大的方法,通过减少搜索空间以获得更有效的解决方案。我还使用了贪婪算法,我需要在每一步中做出局部最优选择。
滑动窗口技术是另一个令人大开眼界的技术——最初具有挑战性,但对于涉及子数组或子串的问题很有价值;需要跟踪序列中元素的移动范围的问题。哈希图和哈希表非常适合涉及频繁查找的问题中的键值对。
我使用过的最复杂的技术之一是动态编程。早期,我发现 DP 相当令人生畏,因为它很难识别重叠的子问题,但随着反复接触,记忆化成为我优化递归调用时最好的朋友。
除了核心 DSA 问题之外,我还有机会尝试更高级的 JavaScript 概念。我编写了包装函数,学习如何控制代码流程并根据特定要求扩展功能。我什至学会了在函数上设置计时器,这允许我处理时间敏感的操作或限制某些函数的执行频率。
使用原型向我展示了通过创建自定义方法可以对数据类型进行超出其内置功能的操作。这使我能够以新的方式扩展对象和数组等数据类型的内置功能。我开始意识到编写干净、模块化代码的重要性。
我还学习了记忆化,这是一种修改函数的技术,以便它存储先前调用的参数及其结果!这是一种缓存,有助于提高多次调用同一函数的问题的性能。我在这里写了关于我的 Memoize 解决方案击败 99%(内存)的文章:Memoize 直观解决方案击败 99% 内存。
在此过程中我开始更加关注的另一件事是代码的优化。在正确介绍了 Structy 上的大 O 表示法之后,我理解了时间和空间复杂性的重要性,并且学会了解决最常见问题的最佳技术。在 HackerRank 挑战赛接近尾声时,我还学会了使用类测试代码并编写泛型。
当我完成 30 天编程挑战时,我感受到了深刻的成长感。它提高了我处理各种问题的能力,加深了我对 JavaScript 和 DSA 的理解。这一个月的旅程不仅仅是解决问题,还提醒自己,我真的可以付出努力。看到一致性和纪律的回报,我的心态得到了更新,可以充满信心和强大的技术工具包来应对任何挑战。
这次经历标志着我编程之旅的一个重要里程碑。我在这 30 天里磨练的技能无疑将延续到我作为软件工程师的职业生涯中。
我为自己付出的努力感到自豪,并感谢在整个挑战过程中为我加油并提供支持和智慧的朋友。
","image":"http://www.luping.net/uploads/20241006/172818757367020cb51a890.jpg","datePublished":"2024-11-07T22:11:52+08:00","dateModified":"2024-11-07T22:11:52+08:00","author":{"@type":"Person","name":"luping.net","url":"https://www.luping.net/articlelist/0_1.html"}}今年 9 月,我开始了一项自我施加的 30 天编程挑战,承诺每天至少解决两个数据结构和算法 (DSA) 问题。我的目标是让自己走出舒适区,建立一致性,并提高我解决问题的能力和编程逻辑。
我不只是坚持一个平台——我完成了 HackerRank 的 30 天编程挑战、LeetCode 的 30 天 JavaScript 计划,还解决了 LeetCode 的 Top Interview 150 track,这是一个针对准备面试的人的 150 个典型面试问题的集合。编码面试。此外,我还学习了一些关于 Structy 的课程,以进一步加强我对 DSA 概念的掌握。
我使用 JavaScript 解决了大多数问题(除了一些不支持 JavaScript 的 HackerRank 问题,所以我使用了 Python)。为了帮助自己承担责任并分享我的进步,我在 Twitter 上发布了我每天解决的挑战。您可以在此引用路径中找到它们:
每天我都会接触不同类型的数据结构和算法。我学会了处理
一些问题涉及更复杂的结构,例如链表和二叉树,而其他问题则将矩阵/n维数组混合在一起,让我可以处理多维空间。
问题的多样性让我保持警惕。 LeetCode 的 30 天 JavaScript 轨道上的问题向我介绍了诸如
之类的基础知识LeetCode 的 Top Interview 150 轨道更进一步,让我在不同难度和方法的问题之间徘徊。每天至少解决其中一个问题是非常宝贵的。这些问题也促使我更频繁地思考优化以及不同的方法如何极大地影响运行时和内存效率。
除了这些挑战之外,我还学习了结构课程,以巩固我对关键概念的理解。我学习了更有效的方法来处理某些数据结构,例如链表和二叉树的部分。我特别欣赏该平台的动态教学方法,并以易于理解的方式分解问题。这是一个很好的平台,可以从非常基础的层面学习 DSA,然后将这种理解转化为我面临的其他编码问题。
随着时间的推移,我遇到了很多种解决方法、解决问题的技巧,例如
我发现两指针方法是解决涉及序列(主要是数组和字符串)的问题的一种简单而强大的方法,通过减少搜索空间以获得更有效的解决方案。我还使用了贪婪算法,我需要在每一步中做出局部最优选择。
滑动窗口技术是另一个令人大开眼界的技术——最初具有挑战性,但对于涉及子数组或子串的问题很有价值;需要跟踪序列中元素的移动范围的问题。哈希图和哈希表非常适合涉及频繁查找的问题中的键值对。
我使用过的最复杂的技术之一是动态编程。早期,我发现 DP 相当令人生畏,因为它很难识别重叠的子问题,但随着反复接触,记忆化成为我优化递归调用时最好的朋友。
除了核心 DSA 问题之外,我还有机会尝试更高级的 JavaScript 概念。我编写了包装函数,学习如何控制代码流程并根据特定要求扩展功能。我什至学会了在函数上设置计时器,这允许我处理时间敏感的操作或限制某些函数的执行频率。
使用原型向我展示了通过创建自定义方法可以对数据类型进行超出其内置功能的操作。这使我能够以新的方式扩展对象和数组等数据类型的内置功能。我开始意识到编写干净、模块化代码的重要性。
我还学习了记忆化,这是一种修改函数的技术,以便它存储先前调用的参数及其结果!这是一种缓存,有助于提高多次调用同一函数的问题的性能。我在这里写了关于我的 Memoize 解决方案击败 99%(内存)的文章:Memoize 直观解决方案击败 99% 内存。
在此过程中我开始更加关注的另一件事是代码的优化。在正确介绍了 Structy 上的大 O 表示法之后,我理解了时间和空间复杂性的重要性,并且学会了解决最常见问题的最佳技术。在 HackerRank 挑战赛接近尾声时,我还学会了使用类测试代码并编写泛型。
当我完成 30 天编程挑战时,我感受到了深刻的成长感。它提高了我处理各种问题的能力,加深了我对 JavaScript 和 DSA 的理解。这一个月的旅程不仅仅是解决问题,还提醒自己,我真的可以付出努力。看到一致性和纪律的回报,我的心态得到了更新,可以充满信心和强大的技术工具包来应对任何挑战。
这次经历标志着我编程之旅的一个重要里程碑。我在这 30 天里磨练的技能无疑将延续到我作为软件工程师的职业生涯中。
我为自己付出的努力感到自豪,并感谢在整个挑战过程中为我加油并提供支持和智慧的朋友。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3