【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;
    }
}
相关推荐
双叶8361 小时前
(C语言)虚数运算(结构体教程)(指针解法)(C语言教程)
c语言·开发语言·数据结构·c++·算法·microsoft
工一木子1 小时前
大厂算法面试 7 天冲刺:第5天- 递归与动态规划深度解析 - 高频面试算法 & Java 实战
算法·面试·动态规划
invincible_Tang3 小时前
R格式 (15届B) 高精度
开发语言·算法·r语言
独好紫罗兰3 小时前
洛谷题单2-P5715 【深基3.例8】三位数排序-python-流程图重构
开发语言·python·算法
序属秋秋秋4 小时前
算法基础_基础算法【高精度 + 前缀和 + 差分 + 双指针】
c语言·c++·学习·算法
玉树临风ives4 小时前
leetcode 2360 图中最长的环 题解
算法·leetcode·深度优先·图论
KeithTsui5 小时前
GCC RISCV 后端 -- 控制流(Control Flow)的一些理解
linux·c语言·开发语言·c++·算法
mNinGInG5 小时前
c++练习
开发语言·c++·算法
纪元A梦5 小时前
分布式锁算法——基于ZooKeeper的分布式锁全面解析
java·分布式·算法·zookeeper
Panesle5 小时前
广告推荐算法:COSMO算法与A9算法的对比
人工智能·算法·机器学习·推荐算法·广告推荐