题目解析
本题我第一个思路是通过分支递归+缓存优化求解
但是经过测试,1 ≤ numbers.length ≤ 100000 数量级下,递归操作会StackOverflow,缓存cache数组占用的内存会超出限制。
后面思考了一下,无论我们怎么选,左边选择的,以及右边选择的,必然都是连续的,且是从头尾开始的连续,即不可出现下面情况:
因此,本题其实可以简化为,将n次分解为左边选择的个数,以及右边选择的个数。
以用例1画图示:
初始时,假设左边选择了0个,右边选择了n=3个,(黄色部分代表选择):
之后,左边选择1个,右边选择2个