“攒青豆”解题思路

81 阅读2分钟

当青训营遇上码上掘金,此次主题创作活动给出了四个题目,后面两个题目是和后端有关的。我选择第四题“攒青豆”。这道题目的输入是给出一个数组,代表一些高低不同的柱子,然后从柱子上方往下洒青豆,看看最终能在柱子里装下多少青豆。

这道题我首先想到的是使用双指针。如果我按照从前往后统计每根柱子所在位置所装的青豆,然后相加就能得出结果。要想能够装下青豆,需要一根柱子两边都有柱子,并且两边的柱子都需要比当前柱子高,因此需要找出当前柱子的前面和后面的一个最高柱子来得到高度,这个就需要使用双指针来获取两边的最高高度。此时的时间复杂度不难看出是*O(nxn)*。

然后降低时间复杂度可以采用动态规划的问题,因为我们使用双指针的目的是得出某一根柱子前后的最高柱子,这个过程中有很多重复的子问题。因此使用两个数组分别记录每个位置的柱子左边的最高高度和右边的最高高度就可以,这样的时间复杂度是*O(n)*。

这样就完成了本题。对于本次参加字节跳动青训营,对我的收获是很大的,在听完工程师们的讲课后,感觉收获很大,我这次的主要目的是想学习Go语言,跟着老师给出的计划,学习进展很快,并且也能够了解到行业正在使用的是哪些技术。我之前也有在掘金社区看文章的习惯,因为这个上面的技术分享都比较专业有用,知识深度也足够,现在加上开发的浏览器插件,每天都能看看一些最新的技术分享,我觉得对于自身的技术成长是很有帮助的。