713、乘积小于K的子数组
k==0和k==1单独设置,k==0或者k==1时不存在严格小于k的子数组,return 0。遍历右端点,更新m,如果满足m<k则ans++,否则一直弹出左边窗口的数并且m除去弹出的数。left和right两个指针指示窗口边界,m为窗口内所有数乘积。
·
题目:

解答:
简单划窗。left和right两个指针指示窗口边界,m为窗口内所有数乘积。
k==0和k==1单独设置,k==0或者k==1时不存在严格小于k的子数组,return 0
遍历右端点,更新m,如果满足m<k则ans++,否则一直弹出左边窗口的数并且m除去弹出的数
class Solution {
public:
int numSubarrayProductLessThanK(vector<int>& nums, int k) {
if(k==0||k==1) return 0;
int len = nums.size();
int left=0,right=0;
int m=1;
int ans = 0;
for(right;right<len;right++){
m*=nums[right];
while(m>=k){
m/=nums[left];
left++;
}
ans+=right-left+1;
}
return ans;
}
};
时间复杂度O(n)
空间复杂度O(1)
更多推荐


所有评论(0)