You are given an array nums
consisting of positive integers.
Return the number of subarrays of nums
that are in strictly increasing order.
A subarray is a contiguous part of an array.
Example 1:
Input: nums = [1,3,5,4,4,6] Output: 10 Explanation: The strictly increasing subarrays are the following: - Subarrays of length 1: [1], [3], [5], [4], [4], [6]. - Subarrays of length 2: [1,3], [3,5], [4,6]. - Subarrays of length 3: [1,3,5]. The total number of subarrays is 6 + 3 + 1 = 10.
Example 2:
Input: nums = [1,2,3,4,5] Output: 15 Explanation: Every subarray is strictly increasing. There are 15 possible subarrays that we can take.
Constraints:
1 <= nums.length <= 105
1 <= nums[i] <= 106
class Solution:
def countSubarrays(self, nums: List[int]) -> int:
ans = i = 0
while i < len(nums):
j = i + 1
while j < len(nums) and nums[j] > nums[j - 1]:
j += 1
cnt = j - i
ans += (1 + cnt) * cnt // 2
i = j
return ans
class Solution {
public long countSubarrays(int[] nums) {
long ans = 0;
int i = 0, n = nums.length;
while (i < n) {
int j = i + 1;
while (j < n && nums[j] > nums[j - 1]) {
++j;
}
long cnt = j - i;
ans += (1 + cnt) * cnt / 2;
i = j;
}
return ans;
}
}
class Solution {
public:
long long countSubarrays(vector<int>& nums) {
long long ans = 0;
int i = 0, n = nums.size();
while (i < n) {
int j = i + 1;
while (j < n && nums[j] > nums[j - 1]) {
++j;
}
int cnt = j - i;
ans += 1ll * (1 + cnt) * cnt / 2;
i = j;
}
return ans;
}
};
func countSubarrays(nums []int) int64 {
ans := 0
i, n := 0, len(nums)
for i < n {
j := i + 1
for j < n && nums[j] > nums[j-1] {
j++
}
cnt := j - i
ans += (1 + cnt) * cnt / 2
i = j
}
return int64(ans)
}
function countSubarrays(nums: number[]): number {
let ans = 0;
let i = 0;
const n = nums.length;
while (i < n) {
let j = i + 1;
while (j < n && nums[j] > nums[j - 1]) {
++j;
}
const cnt = j - i;
ans += ((1 + cnt) * cnt) / 2;
i = j;
}
return ans;
}