本文的目的是传达一种解决数据结构和算法问题的方法。我希望它在您可能会空白的情况下为您提供帮助。
我首先要说明一个显而易见但很重要的事实:你的大脑很棒。您正在不断快速地解决难以想象的复杂问题,这些问题甚至使最具挑战性的FAANG白板问题也像在公园里漫步一样。
“但是,机器人在想象力和现实之间的差距是我的出发点,因为它表明了我们必须了解自己的第一步:欣赏理智生活壮举背后的梦幻般复杂的设计是理所当然的。之所以没有类似人类的机器人,并不是因为对机械头脑的所有想法都被误导了。这是我们人类解决的工程问题,无论是我们观察,行走,规划并使其一整天都比登上月球或对人类基因组测序更具挑战性。大自然再次发现了人类工程师无法复制的巧妙解决方案。哈姆雷特(Hamlet)说:“阿曼真是一件大事!理由多么高贵!多么无限的教职人员!形式和动人的表情令人赞叹!”我们不应该对莎士比亚,莫扎托·爱因斯坦或贾巴尔·阿卜杜勒·贾巴尔(Kareem Abdul-Jabbar)敬畏,而应在四岁时执行将玩具放在架子上的任务。”
平克继续说:“我们与世界一起思考的学院无权凝视自己或我们的其他学院,看看是什么构成了这一主题。”出于所有应有的尊重,这一主张是双曲线的。
我们都是思想的学生–同时是科学家和实验老鼠。当我们使意识成为意识的主体时,我们可以将面纱和熊的证人拉回到内置的算法中,否则这些算法是理所当然的。
可以利用此过程来帮助揭开数据结构和算法问题的神秘面纱。让我们逐步解决一个具体问题以说明概念。
返回大海捞针中第一次出现的针的索引,如果不属于大海捞针,则返回-1。
针对此问题,当needle为空字符串时,我们将返回0。
首先,您需要输入示例。如果默认情况下未提供,请提出要求或定义您自己的输入。
这个阶段与编码无关,而在于观察和解构您的思维方式。
您可以一眼确定“ hello”是否包含“ ll”吗?当然可以。是的这个结论似乎瞬间就实现了,不是吗?它似乎也几乎不需要努力。在这里花点时间来体会一下您在此任务上的想法有多有效。
执行的问题是:如何?更具体地说,您的思想是如何解决的?本文的重点是,您应该专注于该问题,而与以下截然不同的问题相对:您应该如何解决呢?
当我放慢脚步,观察我的头脑如何解决这个问题时,我便开始了下面的解构。好像我的头脑确定了针的长度,然后遍历大海捞针,在针刺过程中制作了针头大小的块,将每个块与针进行比较以确保相等。
现在,只需确定匹配索引2。
我们可能可以使用三个指针进一步剖析它,但是为了简洁起见,我将回避增加的复杂性。
现在,我们已经提出了关于头脑如何解决此问题的建议性解释,将其转换为代码相对来说是微不足道的。
在此阶段避免过早优化。有时候,思维方式是有效的;有时效率低下,您可以对其进行改进。无论哪种方式,都要进行优化。首先使其工作,然后使其变得更好。低效的解决方案总比没有解决方案好。
类解决方案:def strStr(self,haystack:str,needle:str)-> int:haystack_length = len(haystack)-1needle_length = len(needle)-1 i = 0,而i< = haystack_length-needle_length:如果haystack [i:i + needle_length + 1] ==针头:返回ii + = 1返回-1
简而言之,此实现从haystack的第一个元素开始,创建一个针状大小的切片,并将该切片与针进行比较以确保相等。如果确认相等,则返回索引。如果不是,则迭代索引,并从下一个元素开始重复切片和比较。此过程将继续进行,直到相等性检查成功或索引达到haystack_length -needle_length,因为超过该点的任何切片都将不足够匹配针的大小。
希望对您有所帮助。记住,你的大脑很棒。如果您无需代码即可解决问题,那么您已经知道解决方案,只需解压缩即可。