给定一个正整数数组 nums
    找出该数组内乘积小于 k 的连续的子数组的个数。
    示例 1:

    1. 输入: nums = [10,5,2,6], k = 100
    2. 输出: 8
    3. 解释: 8个乘积小于100的子数组分别为: [10], [5], [2], [6], [10,5], [5,2], [2,6], [5,2,6]。
    4. 需要注意的是 [10,5,2] 并不是乘积小于100的子数组。

    说明:

    • 0 < nums.length <= 50000
    • 0 < nums[i] < 1000
    • 0 <= k < 10^6

      class Solution {
      public:
        int numSubarrayProductLessThanK(vector<int>& nums, int k) {
            int len = nums.size();
            if(len == 0){
                return 0;
            }
            int res = 0;
            int left = 0, sum = 1;
            for(int i = 0; i < len; i ++){
                sum *= nums[i];
                while(sum >= k && left <= i){
                    sum /= nums[left];
                    left ++;
                }
                // 因为以 j 为尾元素的子数组找到的起始边界 i 与以 j - 1 为尾元素的子数组找到的起始边界 k 有如下关系:
                // i >= k
                // 而且由于乘积和数组单调递增, 所以只要 [i, j] 小于 k, 则任意的 t > i && t < j, 必有 [t, j] 小于 k
                res += i - left + 1;
            }
            return res;
      
        }
      };