数据类型,从基础到高级

每天我都会接触不同类型的数据结构和算法。我学会了处理

一些问题涉及更复杂的结构,例如链表和二叉树,而其他问题则将矩阵/n维数组混合在一起,让我可以处理多维空间。

问题的多样性让我保持警惕。 LeetCode 的 30 天 JavaScript 轨道上的问题向我介绍了诸如

之类的基础知识

LeetCode 的 Top Interview 150 轨道更进一步,让我在不同难度和方法的问题之间徘徊。每天至少解决其中一个问题是非常宝贵的。这些问题也促使我更频繁地思考优化以及不同的方法如何极大地影响运行时和内存效率。

除了这些挑战之外,我还学习了结构课程,以巩固我对关键概念的理解。我学习了更有效的方法来处理某些数据结构,例如链表和二叉树的部分。我特别欣赏该平台的动态教学方法,并以易于理解的方式分解问题。这是一个很好的平台,可以从非常基础的层面学习 DSA,然后将这种理解转化为我面临的其他编码问题。

方法和技术

随着时间的推移,我遇到了很多种解决方法、解决问题的技巧,例如

我发现两指针方法是解决涉及序列(主要是数组和字符串)的问题的一种简单而强大的方法,通过减少搜索空间以获得更有效的解决方案。我还使用了贪婪算法,我需要在每一步中做出局部最优选择。

滑动窗口技术是另一个令人大开眼界的技术——最初具有挑战性,但对于涉及子数组或子串的问题很有价值;需要跟踪序列中元素的移动范围的问题。哈希图和哈希表非常适合涉及频繁查找的问题中的键值对。

我使用过的最复杂的技术之一是动态编程。早期,我发现 DP 相当令人生畏,因为它很难识别重叠的子问题,但随着反复接触,记忆化成为我优化递归调用时最好的朋友。

函数操作(功能。包装器和原型)

除了核心 DSA 问题之外,我还有机会尝试更高级的 JavaScript 概念。我编写了包装函数,学习如何控制代码流程并根据特定要求扩展功能。我什至学会了在函数上设置计时器,这允许我处理时间敏感的操作或限制某些函数的执行频率。

使用原型向我展示了通过创建自定义方法可以对数据类型进行超出其内置功能的操作。这使我能够以新的方式扩展对象和数组等数据类型的内置功能。我开始意识到编写干净、模块化代码的重要性。

我还学习了记忆化,这是一种修改函数的技术,以便它存储先前调用的参数及其结果!这是一种缓存,有助于提高多次调用同一函数的问题的性能。我在这里写了关于我的 Memoize 解决方案击败 99%(内存)的文章:Memoize 直观解决方案击败 99% 内存。

测试与优化

在此过程中我开始更加关注的另一件事是代码的优化。在正确介绍了 Structy 上的大 O 表示法之后,我理解了时间和空间复杂性的重要性,并且学会了解决最常见问题的最佳技术。在 HackerRank 挑战赛接近尾声时,我还学会了使用类测试代码并编写泛型。

外卖

当我完成 30 天编程挑战时,我感受到了深刻的成长感。它提高了我处理各种问题的能力,加深了我对 JavaScript 和 DSA 的理解。这一个月的旅程不仅仅是解决问题,还提醒自己,我真的可以付出努力。看到一致性和纪律的回报,我的心态得到了更新,可以充满信心和强大的技术工具包来应对任何挑战。

这次经历标志着我编程之旅的一个重要里程碑。我在这 30 天里磨练的技能无疑将延续到我作为软件工程师的职业生涯中。

我为自己付出的努力感到自豪,并感谢在整个挑战过程中为我加油并提供支持和智慧的朋友。

\\\"#aysofCode

","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"}}
”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > #aysofCode 九月:我的 DSA 掌握之旅

#aysofCode 九月:我的 DSA 掌握之旅

发布于2024-11-07
浏览:862

今年 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 轨道上的问题向我介绍了诸如

之类的基础知识
  • 数组转换
  • 函数转换
  • 关闭
  • 课程
  • JSON
  • 承诺和时间。

LeetCode 的 Top Interview 150 轨道更进一步,让我在不同难度和方法的问题之间徘徊。每天至少解决其中一个问题是非常宝贵的。这些问题也促使我更频繁地思考优化以及不同的方法如何极大地影响运行时和内存效率。

除了这些挑战之外,我还学习了结构课程,以巩固我对关键概念的理解。我学习了更有效的方法来处理某些数据结构,例如链表和二叉树的部分。我特别欣赏该平台的动态教学方法,并以易于理解的方式分解问题。这是一个很好的平台,可以从非常基础的层面学习 DSA,然后将这种理解转化为我面临的其他编码问题。

方法和技术

随着时间的推移,我遇到了很多种解决方法、解决问题的技巧,例如

  • 递归
  • 两指针
  • 哈希映射
  • 哈希表
  • 贪心算法
  • 二分查找
  • 滑动窗口
  • 动态规划
  • 缓存(记忆)等等。

我发现两指针方法是解决涉及序列(主要是数组和字符串)的问题的一种简单而强大的方法,通过减少搜索空间以获得更有效的解决方案。我还使用了贪婪算法,我需要在每一步中做出局部最优选择。

滑动窗口技术是另一个令人大开眼界的技术——最初具有挑战性,但对于涉及子数组或子串的问题很有价值;需要跟踪序列中元素的移动范围的问题。哈希图和哈希表非常适合涉及频繁查找的问题中的键值对。

我使用过的最复杂的技术之一是动态编程。早期,我发现 DP 相当令人生畏,因为它很难识别重叠的子问题,但随着反复接触,记忆化成为我优化递归调用时最好的朋友。

函数操作(功能。包装器和原型)

除了核心 DSA 问题之外,我还有机会尝试更高级的 JavaScript 概念。我编写了包装函数,学习如何控制代码流程并根据特定要求扩展功能。我什至学会了在函数上设置计时器,这允许我处理时间敏感的操作或限制某些函数的执行频率。

使用原型向我展示了通过创建自定义方法可以对数据类型进行超出其内置功能的操作。这使我能够以新的方式扩展对象和数组等数据类型的内置功能。我开始意识到编写干净、模块化代码的重要性。

我还学习了记忆化,这是一种修改函数的技术,以便它存储先前调用的参数及其结果!这是一种缓存,有助于提高多次调用同一函数的问题的性能。我在这里写了关于我的 Memoize 解决方案击败 99%(内存)的文章:Memoize 直观解决方案击败 99% 内存。

测试与优化

在此过程中我开始更加关注的另一件事是代码的优化。在正确介绍了 Structy 上的大 O 表示法之后,我理解了时间和空间复杂性的重要性,并且学会了解决最常见问题的最佳技术。在 HackerRank 挑战赛接近尾声时,我还学会了使用类测试代码并编写泛型。

外卖

当我完成 30 天编程挑战时,我感受到了深刻的成长感。它提高了我处理各种问题的能力,加深了我对 JavaScript 和 DSA 的理解。这一个月的旅程不仅仅是解决问题,还提醒自己,我真的可以付出努力。看到一致性和纪律的回报,我的心态得到了更新,可以充满信心和强大的技术工具包来应对任何挑战。

这次经历标志着我编程之旅的一个重要里程碑。我在这 30 天里磨练的技能无疑将延续到我作为软件工程师的职业生涯中。

我为自己付出的努力感到自豪,并感谢在整个挑战过程中为我加油并提供支持和智慧的朋友。

#aysofCode September: My journey to DSA Mastery

版本声明 本文转载于:https://dev.to/akcumeh/30daysofcode-september-my-journey-to-dsa-mastery-647?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 将 django 部署到生产环境
    将 django 部署到生产环境
    我最近将我自己的 django 应用程序部署到生产环境中。该网站名为 videoeiro.com,是用 django HTML/CSS/JS Tailwind 开发的。 设置 我正在使用 debian 12 服务器,它将通过 cloudflare 隧道公开我的应用程序。所有静态文件都...
    编程 发布于2024-11-07
  • 实施雪花 ID 生成器
    实施雪花 ID 生成器
    什么是雪花 ID? 雪花 ID 在分布式环境中用于生成无冲突、简短、唯一的 ID。与依赖数据库生成 ID 或使用长 128 位 UUID 等传统方法不同,Snowflake ID 使用时间和简单的按位运算。这种巧妙的技术允许每个微服务独立生成唯一的 ID,而不需要中央系统来避免冲突...
    编程 发布于2024-11-07
  • 如何在没有 JS 框架的情况下使用 CSS 设计 SVG 图像样式?
    如何在没有 JS 框架的情况下使用 CSS 设计 SVG 图像样式?
    使用 CSS 设置 SVG 图像样式:一种新颖的方法在本文中,我们将探索一种使用 CSS 嵌入 SVG 图像并操纵其外观的新颖方法,而无需使用 CSS使用 JS-SVG 框架。问题陈述以前,集成 SVG 图像同时通过 CSS 保持对其元素的访问一直是一个挑战。虽然 JS-SVG 框架提供了解决方案,...
    编程 发布于2024-11-07
  • ## 你能确定用户是否可以在 JavaScript 中单击后退按钮吗?
    ## 你能确定用户是否可以在 JavaScript 中单击后退按钮吗?
    浏览器历史记录导航:确定后退按钮可用性开发 Web 应用程序时,确定用户是否可以在他们的浏览器历史记录。然而,出于安全考虑,JavaScript 缺乏直接手段来确定浏览器历史记录是否存在。尝试的解决方案及其局限性:1。 History.previous:虽然该属性理论上提供了有关历史记录中上一页的信...
    编程 发布于2024-11-07
  • 如何在保持模糊背景的同时去除子元素的背景模糊?
    如何在保持模糊背景的同时去除子元素的背景模糊?
    从子元素中删除背景模糊您有一个 ,其背景图像应用了模糊效果。但是,所有子元素也会受到这种模糊的影响,这是不希望的。本文提供了解决此问题的解决方案,允许您在保持背景图像的模糊效果的同时保留子元素的清晰度。解决方案:创建叠加元素要实现此目的,您可以在父元素中创建一个单独的 并将背景图像和模糊效果应用到...
    编程 发布于2024-11-07
  • Leetcode:字符串的最大公约数
    Leetcode:字符串的最大公约数
    问题陈述 1071. 字符串的最大公约数 对于两个字符串 s 和 t,当且仅当 s = t t t ... t t (即 t 与自身连接一次或多次)时,我们才说“t 除 s”。 给定两个字符串 str1 和 str2,返回使 x 整除 str1 和 str2 的最大字符串 x。 ...
    编程 发布于2024-11-07
  • Vue 黑暗面备忘单 |部分反应性
    Vue 黑暗面备忘单 |部分反应性
    Hi there DEV.to community! This article will include multiple aspects of Vue 3 that are mostly used or are kind of on the dark side and not paid atten...
    编程 发布于2024-11-07
  • 如何在 Pygame 中同时运行多个 While 循环?
    如何在 Pygame 中同时运行多个 While 循环?
    如何在Pygame中同时实现多个While循环在Pygame中,可以同时执行多个While循环,允许独立和程序中的连续操作。克服执行阻塞在提供的代码片段中,问题是由于存在两个试图同时运行的 while 循环而引起的。第二个循环包含 time.sleep() 函数来引入延迟,它会干扰第一个循环的执行,...
    编程 发布于2024-11-07
  • Go 中如何根据元素的第一次出现来拆分字符串?
    Go 中如何根据元素的第一次出现来拆分字符串?
    仅根据 Go 中元素的第一次出现来拆分字符串使用 git 分支名称时,可能需要拆分它们以区分远程和远程分支名称。分支名称本身。虽然最初采用了按第一个斜杠分割,但由于分支名称中可能存在多个斜杠,事实证明它是不够的。为了解决这个问题,提出了一种更简洁的方法,可以避免手动元素移动和重新合并。利用strin...
    编程 发布于2024-11-07
  • 如何在Python中检查列表是按升序还是降序排序?
    如何在Python中检查列表是按升序还是降序排序?
    验证列表顺序的 Pythonic 方法处理按升序 (ASC) 或降序 (DESC) 顺序的值列表时,通常需要验证元素的正确排序。 Python 以其用户友好的语法而闻名,提供了一种优雅的方式来执行此检查。要确定列表是按 ASC 还是 DESC 排序,请考虑以下 Pythonic 解决方案:all(l...
    编程 发布于2024-11-07
  • Django 适合所有人。
    Django 适合所有人。
    即使对于“小型”网站,Django 也很棒 我认为人们倾向于认为 Django 要么用于构建老式的、工业强度的整体应用程序,要么用于 API 并使用 React 之类的东西作为前端。我在这里告诉您,即使对于您的个人网站,普通的 Django 也是一个不错的选择!在我看来,如果你需要...
    编程 发布于2024-11-07
  • Go 编程教程:掌握时间、函数和并发
    Go 编程教程:掌握时间、函数和并发
    您是一名想要扩展技能的 Go 程序员吗?别再犹豫了!这本包含 7 个 LabEx 教程的集合涵盖了广泛的基本 Go 编程概念,从处理时间和持续时间到探索并发和接口的强大功能。 ? 在第一个教程中,您将深入了解 Go 的时间和持续时间支持,学习如何有效地使用程序的这些基本构建块。接下来,您将探索可变参...
    编程 发布于2024-11-07
  • 如何在单个 Google 表格脚本中组合多个 onEdit 函数?
    如何在单个 Google 表格脚本中组合多个 onEdit 函数?
    合并多个onEdit函数创建Google表格脚本时,您可能会遇到需要多个onEdit函数来处理不同编辑事件的情况。但是,单个脚本不能有两个同名的函数。要解决此冲突,请考虑以下方法:合并两个 onEdit 函数function onEdit(e) { onEdit1(e); onEdit2(e...
    编程 发布于2024-11-07
  • 如何使用 JavaScript 的“exec”函数执行 Shell 命令?
    如何使用 JavaScript 的“exec”函数执行 Shell 命令?
    在 JavaScript 中无缝执行 Shell 命令JavaScript 的多功能性不仅限于 Web 开发,还包括强大的系统交互功能。其中一个关键方面是能够执行 shell 命令并检索其输出。如何在 JavaScript 中执行 Shell 命令要在 JavaScript 中执行 shell 命令...
    编程 发布于2024-11-07
  • 如何在 PHP 中检索 UTC 时间戳?
    如何在 PHP 中检索 UTC 时间戳?
    如何在 PHP 中检索 UTC 时间戳使用 date() 函数在 PHP 中获取当前时间戳非常简单。但是,默认情况下,date() 返回基于服务器时区的时间戳。要获取协调世界时 (UTC) 中的时间戳,我们需要使用不同的方法。解决方案:使用 gmdate()要检索 UTC 中的时间戳,我们可以使用P...
    编程 发布于2024-11-07

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3