713. Subarray Product Less Than K

在这里插入图片描述

暴力解法:

class Solution {
public:
    int numSubarrayProductLessThanK(vector<int>& nums, int k) {
        if (k == 0)
            return 0;
        int retCnt = 0;
        for (int i = 0; i < nums.size(); ++i) {
            long long pro = 1;
            int j = i;
            while (j >= 0) {
                pro *= nums[j];
                if (pro < k) 
                    --j;
                else 
                    break;
            }
            retCnt += (i - j);
        }
        return retCnt;
    }
};

超时。
然后配合滑动窗口:

class Solution {
public:
    int numSubarrayProductLessThanK(vector<int>& nums, int k) {
        if (k == 0)
            return 0;
        int i = 0, j = 0;
        long long pro = 1;
        int retCnt = 0;
        while (i < nums.size()) {
            pro *= nums[i++];
            while (pro >= k && j < i) {
                pro /= nums[j++];
            }
            retCnt += (i - j);    
        }
        return retCnt;
    }
};
posted @ 2019-10-17 10:44  于老师的父亲王老爷子  阅读(9)  评论(0编辑  收藏  举报