这与经典的鳕鱼Frog-River-One不同,叶子在不同时间出现问题。
有一部分被切断了:如果猴子可以跳过河流,那么函数会返回0.如果不可能跳过河流,那么-1。
一些测试用例包括:
[[ - 1,5,-1,5,-1,10],3] - >返回5
[[1,-1,0,2,3,5],3] - >返回2
[[0,0,0,0,0,0],3] - >返回0
图像有问题描述。我使用递归以蛮力的方式做到这一点,虽然我相信它返回了正确的答案,但它可能不够好,因为它会产生O(n ^ D)的运行时间。
有没有办法更有效地解决这个问题?我没看到什么?我觉得可能有一个DP解决方案或者像一个简单的数学技巧......我附上我的解决方案供参考。
答案 0 :(得分:2)
请注意,您可以通过以下递归关系表达x = i
的最早时间:
shortest[i] = if A[i] = -1 then +inf
else max(A[i], min{shortest[j] | i - D <= j < i})
首先,只有一个简单的O(ND)
解决方案,只使用动态编程。
实际上,这可以使用有效的算法减少到O(N + D)
,以便在滑动窗口shortest
上保持[i-D ... i]
的最小值(使用双端队列)。