Leetcode 713. 乘积小于K的子数组 题解

题目链接:https://leetcode-cn.com/problems/subarray-product-less-than-k/
在这里插入图片描述
滑动窗口双指针,这里要求小于k的而非等于k的,所以每次调整窗口后要看看是不是要再算一次。

第一次遇到了“超出输出限制”,发现我的stdout爆炸了。。。

代码如下:

class Solution {
public:
    int numSubarrayProductLessThanK(vector<int>& nums, int k) {
        int len = nums.size();
        int l = 0, r = 0;
        int res = 0, now = 1;

        while(r < len) {
            bool bigger = false;
            now *= nums[r];
            
            if(now < k) {
                res += (r - l + 1);
            }
            //printf("part1: now = %d, l = %d, r = %d, res = %d\n", now, l, r, res);
            while(now >= k) {
                if(l >= r) {
                    break;
                }
                now /= nums[l];
                l++;
                bigger = true;
            }
            if(now < k && bigger == true) {
                res += (r - l + 1);
            }
            //printf("part2: now = %d, l = %d, r = %d, res = %d\n", now, l, r, res);
            r++;
        }
        return res;
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_42396397/article/details/105897315