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.
Example 1:
Input: nums = [10, 5, 2, 6], k = 100
Output: 8
Explanation: 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.
Note:
0 < nums.length <= 50000.0 < nums[i] < 1000.0 <= k < 10^6.
题目链接:https://leetcode.com/problems/subarray-product-less-than-k/
题目分析:因为都是正数,所以往后累乘的结果必然是单调增的,两点法维护即可
8ms,时间击败98.47%
class Solution {
public int numSubarrayProductLessThanK(int[] nums, int k) {
if (k < 2) {
return 0;
}
int l = 0, cur = 1, ans = 0;
for (int r = 0; r < nums.length; r++) {
cur *= nums[r];
while (cur >= k) {
cur /= nums[l++];
}
ans += r - l + 1;
}
return ans;
}
}

本文介绍了一个LeetCode上的编程挑战,目标是计算并返回一个正整数数组中所有连续子数组的数量,这些子数组的乘积小于给定阈值K。使用滑动窗口算法,我们能够有效地解决这个问题,时间复杂度为O(n),并在LeetCode上取得了优秀的性能表现。

494

被折叠的 条评论
为什么被折叠?



