拼多多第四题编程题解

由于第一个小时在面试,最后总的算下来只有半个小时在笔试,最后一题后面想了一个平方级别的算法,评论区貌似只有立方级别的做法。
首先枚举i,j表示最后两个是那两个位置,暂且叫做dpij。
然后我们考虑极端情况,全部是0,那么ij可以转移到任何一个位置,复杂度=状态数*状态转移=n^3
肯定是不行的。
那么怎么办,我们贪心一下,ij只转移到里ak=ai+aj,ak是离ij最近的位置,可以把后面的ak都不用考虑
这一步贪心可以省去一个n的复杂度。
然后就很简单了,由于上面的贪心,dpij只可能转移到唯一一个dp[i'][j']
状态转移只要O(1),状态数要n^2
总共就只要n^2
,最后不得不说,和他的公司名声相比,他家的笔试题质量不知好到哪里去了。(至少让我觉得题目还是有思考价值)
#春招##笔试题目#
全部评论
半个小时做到第四题了。。。。
点赞 回复 分享
发布于 2018-03-21 11:16
其实预处理一下,先给数组排个序,记录着原先的下标,可以N^2logN实现的,枚举a[i],a[i-2],二分查找是否在a[i]和a[i - 2]之间存在a[i-1]。。。 dp[i]表示当前能达到的最长序列,状态转移方程: dp[i] = max(dp[i], dp[j] + 2)当且仅当a[i] = a[j] + a[k], j < k < i,二分查找a[k]是否存在。
点赞 回复 分享
发布于 2018-03-21 11:42

相关推荐

评论
1
收藏
分享
牛客网
牛客企业服务