По сути, это N <= 10^5
, что означает, что вы должны найти решение O(n*log(n))
для этого. Ваш DFS может быть тривиально уменьшен до O(N^2)
, если вы его мемоизируете, но он значительно медленнее в своем текущем немемоизированном состоянии. Идея заключается в том, что вы можете использовать структуру данных, такую как дерево Фенвика (также известное как двоичное индексированное дерево или BIT), для хранения, если позиция может достигнуть конца или нет. Затем вы можете получить сумму диапазона в O(log(n))
и также обновить элемент в O(log(n))
. Затем вы можете определить входной массив как nums
, массив, содержащий, может ли индекс быть poss
, и сумму poss[x]
от i
до j
(включая j
, но не i
) должно быть sum(poss, i, j)
. Вы можете рассчитать poss
по следующей формуле:
poss[n - 1] = 1
poss[i] = max(1, sum(poss, i, min(i + nums[i], n - 1)))