【LeetCode-剑指offer】-- 9.乘积小于K的子数组

9.乘积小于K的子数组

方法:滑动窗口

关于为什么子数组数目为j-1+1。这时候就要理解采用滑动窗口的思路其实是枚举子数组的右端点,然后来找到满足条件的最小左端点。也即当得到满足条件的窗口时,就意味着得到了以 j 作为右端点时满足条件的左端点的最小值。那么此时满足条件的子数组个数当然就等于窗口能所有能作为左端点的位置个数,即j-i+1。

java 复制代码
class Solution {
    public int numSubarrayProductLessThanK(int[] nums, int k) {
        int n = nums.length;
        int ans = 0;
        int start = 0,end = 0,mat = 1;
        while(end < n){
            mat *= nums[end];
            while(start <= end && mat >= k){
                mat /= nums[start];
                start++;
            }
            ans += end - start + 1;
            end++;
        }
        return ans;
    }
}
相关推荐
Felven11 分钟前
B. Skibidus and Ohio
算法
yonuyeung17 分钟前
代码随想录算法【Day54】
java·数据结构·算法
敲上瘾23 分钟前
基础dp——动态规划
java·数据结构·c++·python·算法·线性回归·动态规划
西猫雷婶41 分钟前
python学智能算法(三)|模拟退火算法:深层分析
算法·机器学习·模拟退火算法
张有志_1 小时前
STL容器终极解剖:C++ vector源码级实现指南 | 从内存分配到异常安全的全流程避坑
c语言·c++·算法·开源·visual studio
mvufi1 小时前
day58 第十一章:图论part08
数据结构·算法·图论
williamzhou_20132 小时前
深搜专题2:组合问题
数据结构·算法
web_155342746563 小时前
性能巅峰对决:Rust vs C++ —— 速度、安全与权衡的艺术
c++·算法·rust
计算机小白一个9 小时前
蓝桥杯 Java B 组之设计 LRU 缓存
java·算法·蓝桥杯
万事可爱^10 小时前
HDBSCAN:密度自适应的层次聚类算法解析与实践
算法·机器学习·数据挖掘·聚类·hdbscan