Subarray Product Less Than K问题及解法

来源:互联网 发布:淘宝达人申请理由简述 编辑:程序博客网 时间:2024/06/06 21:42

问题描述:

Your are given an array of positive integers nums.

Count and print the number of (contiguous) subarrays where the product of all the elements in the subarray is less than k.

示例:

Input: nums = [10, 5, 2, 6], k = 100Output: 8Explanation: The 8 subarrays that have product less than 100 are: [10], [5], [2], [6], [10, 5], [5, 2], [2, 6], [5, 2, 6].Note that [10, 5, 2] is not included as the product of 100 is not strictly less than k.

问题分析:

利用双指针,始终寻找product小与k的子数组,统计这样的子数组个数,这里的关键是统计方法的确定。


过程详见代码:

class Solution {public:    int numSubarrayProductLessThanK(vector<int>& nums, int k) {        if (k <= 1) return 0;        int n = nums.size(), prod = 1, ans = 0, left = 0;        for (int i = 0; i < n; i++) {            prod *= nums[i];            while (prod >= k) prod /= nums[left++];            ans += i - left + 1;        }        return ans;    }};