已经知道求出最大子数组和的思路:遍历求出dp[i]数组中的最大值即为最大子数组和。
如何求出最大子数组下标?
由dp[i]的定义,子数组结束位置为max(dp[i])的下标i
求起始位置方法:
可建立一维数组rec[n],初始化为0
当dp[i]=nums[i]时,rec[i]=0;
Dp[i]=nums[i]+dp[i-1]时,rec[i]=1;
这样,设已知的最大子数组结束位置下标为i,若i=0,则起始下标=结束下标=i
否则,从已知的结束位置i逆序遍历rec数组直到遇见0为止。
输出最后遍历到的rec值为1的下标,即为起始下标。