连续子数组的个数
代码:
核心代码:ans += j - i + 1
- prod 存储乘积,i 为乘积数组的左端点,j 为乘积数组的右端点
- 第一层 for 循环右端点右移,内存 for 保证乘积小于 k ,且要保证左端点小于右端点
- 每次右端点右移后新增的子数组组合,正是
j - i + 1,然后将其加入 ans 即可
func numSubarrayProductLessThanK(nums []int, k int) (ans int) {
prod, i := 1, 0
for j, num := range nums {
prod *= num
for ; i <= j && prod >= k; i++ {
prod /= nums[i]
}
ans += j - i + 1
}
return
}