小塔定义一个长度为n的数组为“山峰数组”:存在这样的一个位置,使得这个位置左右两边的全部元素均依次严格递减;使用数学的语言来描述,即存在x∈(1,n)使得ai−1<ai(i∈[x,n])且ai>ai+1(i∈[1,x])。例如 [1,2,5,4,2]和[1,3,2]是“山峰数组”而[1],[1,2,3],[1,2,1,2]和[1,2,1,1]不是“山峰数组”。
小塔有一个长度为n的数组a1,a2,…,an,他想知道在全部的子数组✟中,是“山峰数组”的子数组的长度最大值是多少。
✟:如果数组a可以通过从数组b的开头删除若干(可能为零或全部)元素以及从结尾删除若干(可能为零或全部)元素得到,则数组a是数组b的子数组。
大家先学习LIS以及其优化方法:https://leetcode.cn/circle/discuss/r3ucvm/
在知道这个知识点以后,我们不难想出,任意一个山峰序列都是由:山峰+ 山峰往左的LIS + 山峰往右的LIS 组成的。