3299:连续子序列的和(★★)
目录
题目
如果一个长度为 n 的数组 arr 符合下面其中一个条件,可以称它 连续:
- 对于所有的
1 <= i < n,arr[i] - arr[i - 1] == 1。 - 对于所有的
1 <= i < n,arr[i] - arr[i - 1] == -1。
数组的 值 是其元素的和。
例如,[3, 4, 5] 是一个值为 12 的连续数组,并且 [9, 8] 是另一个值为 17 的连续数组。而 [3, 4, 3] 和 [8, 6] 都不连续。
给定一个整数数组 nums,返回所有 连续 非空 子序列 的 值 之和。
由于答案可能很大,返回它对 109 + 7 取模 的值。
注意 长度为 1 的数组也被认为是连续的。
示例 1:
输入:nums = [1,2]
输出:6
解释:
连续子序列为 [1],[2],[1, 2]。
示例 2:
输入:nums = [1,4,2,3]
输出:31
解释:
连续子序列为:[1],[4],[2],[3],[1, 2],[2, 3],[4, 3],[1, 2, 3]。
提示:
1 <= nums.length <= 1051 <= nums[i] <= 105
分析
- 维护以 x 结尾的递增/减连续子序列个数和、子序列总和,即可递推
- 长度为 1 的子序列被统计了两次,减去即可
解答
|
|
769 ms