题目描述
给定一个数组,我们称其中连续的元素为连续子序列,称这些元素的和为连续子序列的和。
数组中可能存在几组连续子序列,组内的连续子序列互不相交且有相同的和。
求一组连续子序列,组内子序列的数目最多。
输出这个数目。
输入描述
第一行输入为数组长度N,1<=N<=10^3
第二行为N个用空格分开的整数 Ci,-10^5 <= Ci <= 10^5
输出描述
第一行是一个整数M,表示满足要求的最多的组内子序列的数目。
用例
输入 | 10 8 8 9 1 9 6 3 9 1 0 |
输出 | 4 |
说明 | 四个子序列的第一个元素和最后一个元素的下标分别为 2 2 4 4 5 6 7 7 |
输入 | 10 -1 0 4 -3 6 5 -6 5 -7 -3 |
输出 | 3 |
说明 | 三个子序列的第一个元素和最后一个元素的下标分别为: 3 3 5 8 9 9 |
题目解析
最简单的:
如果不考虑复杂度,使用两个for循环来暴力求解所有的连续子序列,因为长度只有1000个。应该不会超时!
如果怕超时,可以使用动态规划前缀和来解:
1、将和相同的连续子序列的区间统计在一起
2、求解每个“和” 下的最大不相交区间数量,保留最大数量作为题解
假设不相交区间数量为count,则至少为1
1、先将多个区间,按照右边界升序