这个标题可能听起来很大胆,很有点击率,但事实就是如此......
几天前,我偶然发现了LinkedIn上的一个帖子(不幸的是,我没有保存链接),其中一个程序员展示了他对LeetCode挑战的解决方案。代码很好,帖子得到了几十个人的喜欢,这无疑是当之无愧的。我决定将这些要求反馈给ChatGPT-4,看看它是否能理解并解决这个问题。结果是......有趣的,我花了一些时间对人工智能进行实验,修改了提示,看看它对结果有什么影响。
挑战
首先,我希望你看一下LeetCode问题并尝试解决它。花点时间,想一想。然后,谷歌一下。是的,在互联网上搜索最佳解决方案。
给出两个整数数组
pushed
和popped
,每个数组都有不同的值,如果这可能是初始空堆栈上一连串推和弹操作的结果,则返回true
,否则返回false
。例子1:
Input: pushed = [1,2,3,4,5], popped = [4,5,3,2,1] Output: true Explanation: We might do the following sequence: push(1), push(2), push(3), push(4), pop() -> 4, push(5), pop() -> 5, pop() -> 3, pop() -> 2, pop() -> 1
例2:
Input: pushed = [1,2,3,4,5], popped = [4,3,5,1,2] Output: false Explanation: 1 cannot be popped before 2.
限制条件:
1 <= pushed.length <= 1000
0 <= pushed[i] <= 1000
pushed
的所有元素都是唯一的。
popped.length == pushed.length
popped
是 的一个置换。pushed
完成了吗?
好了,还记得我让你动脑筋,用谷歌搜索吗?所以,如果机器生成的解决方案恰好更有效,那么 "这不公平,因为它是在互联网的数据上训练出来的 "的说法是不被接受的😉。
释放克拉肯
当我最初要求ChatGPT解决这个挑战时,我从LeetCode复制了这个任务。然而,在这种情况下,它可能确实看起来像人工智能从它的 "记忆 "深处拉出的解决方案,没有经过多少 "思考"。因此,让我们重新表述一下要求,看看机器是否能够处理它。这是我使用的提示:
输出:
不错,根据LeetCode的统计,这是个平均的解决方案,或多或少。现在让我们进一步推动我们心爱的人工智能,并要求它加强代码:
这就是事情变得真正有趣的地方!它不仅提供了一个优雅的解决方案,没有分配堆栈,而且还解释了这种优化可能产生的潜在问题。让我们在LeetCode上检查一下吧:
数字是不言而喻的,对吗?当然,有些人可能会认为LeetCode的基准不一致,这是一个合理的观点。尽管如此,事实是,人工智能立即产生了一个像样的解决方案,并以一种不是每个软件工程师都能做到的方式改进了它。
下一步是什么?
那么,我们的工作安全吗?
是的😅(除非你为埃隆-马斯克工作)
打个比方,今天的ChatGPT(以及GitHub Copilot等其他人工智能助手)就像一个电动工具,可以钻洞、打螺丝、锯东西等等。然而,如果你只是把它放在地上,它不会为你建造房子。更重要的是,不熟练的人甚至可能用这种工具伤害自己。另一方面,有经验的工程师可以利用人工智能的力量和潜力,大幅提高他们的工作质量。
就到这里吧。干杯!