Tag: Leetcode

解决LeetCode中的问题对我有什么帮助?

几周前,我启动了我的第一个iOS应用程序,它具有关于Swift的非常基础的知识,这些知识是我通过一些教程和主要是Apple文档中学到的。 但是后来,我对任何编程语言都不了解,几乎所有在Swift中学到的东西对我来说都是新的。 掌握了基本数据类型,条件语句和循环的新手知识之后 ,我开始使用Swift进行编码。 在开发应用程序的过程中,我学习并使用了某些iOS SDK和库。 随着我的知识的增长,它主要取决于应用程序开发本身,而很少涉及编程概念。 这里要具体说明数据结构和算法。 我在应用商店中发布了我的应用。 在与朋友一起审查该应用程序并谈论其可扩展性时,我了解到我还有很多东西要学习。 不仅是编程语言,数据结构和算法,还涉及解决问题的方法。 我相信通过经验学习,这样我才能更快地学习,解决现实生活中的问题并保持动力。 因此,我一直在浏览有关我应该学习什么以及应该如何开始的网站,并且对初学者学习编程的所有不同选择感到非常困惑。 幸运的是,我的一个朋友向我介绍了Leetcode。 LeetCode是一个平台,允许任何人以越来越困难的方式解决编程问题。 当我开始解决问题时,我觉得LeetCode是一个很好的平台,可以提高您在解决问题和编码方面的技能 。 它支持Swift,因此我也可以掌握编程语言,最终帮助我更快更好地构建iOS应用。 LeetCode 提升您的编码技能,并迅速找到工作。 这是扩展您的知识并做好准备的最佳场所。 leetcode.com 如何开始解决问题的实践: 首先,对要学习的东西有个目标 。 对我而言,这是使用正确的OOPS概念编写更好,更简洁的代码,并对数据结构和算法有深入的了解。 从简单的事情开始,这样您就会获得信心。 然后逐步解决中/硬问题。 尝试在40分钟内解决 。 如果找不到解决方案,请查看提示,然后继续。 当您开始感到更加自信时,请减少时间。 如果您不了解某些内容,请不要犹豫 。 当我说Google时,请不要用Google搜索问题本身。 Google会根据您的想法解决问题,并了解如何实施这些想法。 对于数据结构(DS)学习 ,首先列出要保留的数据结构 。 然后阅读有关google,GeeksforGeeks等中的内容的信息,一旦您掌握了一些知识,请先使用您选择的编程语言来实施DS ,然后再使用DS解决问题。 然后在LeetCode中搜索数据结构的实现问题。 解决该问题的方法有助于我理解如何将特定类型的数据结构应用于问题。 测试您的代码并提交 。 如果您的代码没有通过,请不要放弃。 尝试修复错误,直到正确为止。 LeetCode的主要学习成果: 了解面向对象的编程。 更好地解决问题 。 开始掌握时间和空间的复杂性 。 了解哈希表和B树 。 […]

Swift中的Leetcode解决方案和思想—问题554

矩阵和哈希表 难度:中等 录取率:46.5% 你面前有一堵砖墙。 墙是矩形的,有几排砖头。 砖块的高度相同,但宽度不同。 您想要从顶部 到底部绘制一条垂直线,并穿过最少的砖块。 砖墙由行列表表示。 每行是一个整数列表,从左到右代表该行中每个砖的宽度。 如果您的线穿过砖的边缘,则该砖不视为交叉。 您需要找出如何绘制线以穿过最小的砖并返回交叉的砖的数量。 您不能仅沿着墙的两个垂直边缘之一绘制一条线,在这种情况下,该线显然不会穿过任何砖块。 这个问题是相当困难的。 我们需要知道的前两件事是墙的宽度和高度 。 从宽度和高度,我们可以首先创建一个像这样的矩阵: 每个“ 0”表示那里的空间被砖块阻塞。 我们希望矩阵变成这样: 其中1表示两个积木之间的交集(或未交叉)。 因此,我们要做的是在各列之间找到最大的加1。 完整的方法如下所示: 该解决方案的复杂度基本上是O(n²),但是我们首先创建一个矩阵,并且还有其他for循环,这使得运行时间超出了时间限制。 矩阵似乎不是一个好主意,所以让我们以哈希表的方式进行。 在第3行,我们首先创建一个字典,以注意每列未越过多少块砖, 然后我们遍历砖墙,我们知道当柱位于砖之间时,柱上不会有任何砖交叉。 循环时替换mostCrossed变量。 该解决方案的复杂度也是O(n²),但是借助哈希表,显然更快。

LeetCode 301 —删除无效的括号

BFS尝试删除每个(或)并检查其是否有效,条件是删除的最少数量并打印所有可能的结果。 在移除次数最少的情况下,一旦我们从队列中找到有效的字符串(如下图(2)所示),则将标志设置为“ found”,并且不再砍掉字符串。 但是为了找到所有可能的结果,我们继续检查队列中的左侧元素(3),(4),(5),因为(3),(4),(5)与(2)处于同一级别表示相同的长度。 在处理(1)时,将下一级元素(6),(7),(8),(9)放入队列中。 在发现(2)是有效的之后,队列中剩余元素的处理需要排除(6),(7),(8),(9)。 如果(6),(7),(8),(9)之一有效,则将其与(2)的长度进行比较并丢弃。 在C ++中