2393. 严格递增的子数组个数 🔒
题目描述
给定一个由 正整数 组成的数组 nums
。
返回 严格递增 顺序的 nums
子数组 的数目。
子数组 是数组的一部分,且是 连续 的。
示例 1:
输入: nums = [1,3,5,4,4,6] 输出: 10 解释: 严格递增的子数组如下: - 长度为 1 的子数组: [1], [3], [5], [4], [4], [6]。 - 长度为 2 的子数组: [1,3], [3,5], [4,6]。 - 长度为 3 的子数组: [1,3,5]。 子数组的总数是 6 + 3 + 1 = 10。
示例 2:
输入: nums = [1,2,3,4,5] 输出: 15 解释: 每个子数组都严格递增。我们可以取 15 个子数组。
提示:
1 <= nums.length <= 105
1 <= nums[i] <= 106
解法
方法一:双指针
利用双指针,找到每一段连续递增子数组的长度,我们记为 cnt
,每次将 $(1+cnt)\times cnt / 2$ 累加到答案中。
时间复杂度 $O(n)$,空间复杂度 $O(1)$,其中 $n$ 是数组的长度。
1 2 3 4 5 6 7 8 9 10 11 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
方法二:枚举
我们可以枚举数组中的每一个元素,找到以该元素为结尾的严格递增子数组的个数,然后将这些个数累加到答案中。
时间复杂度 $O(n)$,空间复杂度 $O(1)$,其中 $n$ 是数组的长度。
1 2 3 4 5 6 7 8 9 10 11 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|