我们通过一个题目来讲解:
首先有一个讲解一下就是,一般思路就是:1.在第i个数中,前面有m个数,然后一个个求这m个数中子数和的最大值,然后i再往后移动一位,再继续前面的动作。时间复杂度就是o(m * n), 但是单调队列就可以实现o(N)的时间复杂度。但实现之前,还需要灵活一下,是由于这个题目是求前x数列的和,那么我们就可以求s1, s2, s3 , s4,...si, ....sn,如果要求aj ...ai之间的和,就等于si - s(j - 1)就可以了,那么第i个数是定下来的,sj - 1 越小,那和就越大,那么我们不妨存储最小值,然后到第i个就可以直接求出来,就不需要o(m)这一复杂度了,直接变成o(1)了。
那么我们这么维护他呢,看代码,我会一步步的讲解,我学的时候,他们就一下就给出了,想了好久: