[M双指针] lc713. 乘积小于 K 的子数组(双指针+好题)

文章目录

    • [1. 题目来源](#1. 题目来源)
    • [2. 题目解析](#2. 题目解析)

1. 题目来源

链接:713. 乘积小于 K 的子数组

题单位置:

    1. 滑动窗口(定长/不定长/多指针)
    • 不定长滑动窗口(求子数组个数)

2. 题目解析

经典的 双指针、滑动窗口 问题。

思路:

  • 能发现让右边界向右拓展时,窗口内元素已经大于 k,则可以尝试缩小左边界。
  • 且左边界不会再回头向左拓展,左指针具有单调性。适合使用滑动窗口来处理。

技巧:

  • 灵神这里写了些特殊判断,k=0、1,然后就可以在 while 循环中不用去判断 l<=r 的这个情况。反例就是 1,1,1, k=1 这种情况。
  • 个人觉得还是判断一下比较好。更加直观。
  • 有些判断可加可不加,把握好就行。

  • 时间复杂度 : O ( n ) O(n) O(n)
  • 空间复杂度 : O ( 1 ) O(1) O(1)

cpp 复制代码
class Solution {
public:
    int numSubarrayProductLessThanK(vector<int>& nums, int k) {
        int n = nums.size();
        int res = 0, s = 1;
        for (int l = 0, r = 0; r < n; r ++ ) {
            s *= nums[r];
            while (l <= r && s >= k) s /= nums[l ++ ]; // 这样写,l 最终可能会越界,超过 r
            res += r - l + 1;
        }
        
        return res;
    }
};
相关推荐
kkeeper~3 小时前
0基础C语言积跬步之数据在内存中的存储
c语言·数据结构·算法
2401_868534783 小时前
论企业网络设计
数据结构
wabs6664 小时前
关于贪心算法的一些自我总结【力扣45.跳跃游戏II】【灵感来源:代码随想录】
算法·贪心算法·复盘
2401_876964134 小时前
【湖北专升本】2026湖北专升本真题PDF+备考资料汇总
数据结构·人工智能·经验分享·深度学习·算法·计算机视觉
嗝o゚5 小时前
CANN GE 算子融合——融合算法与调度策略
算法·昇腾·cann·ge
小江的记录本5 小时前
【JVM虚拟机】垃圾回收GC:垃圾回收算法:标记-清除、标记-复制、标记-整理、分代收集(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·算法·安全·面试
Ulyanov7 小时前
用声明式语法重新定义Python桌面UI:QML+PySide6现代开发入门(一)
开发语言·python·算法·ui·系统仿真·雷达电子对抗仿真
数据科学小丫7 小时前
特征工程处理
人工智能·算法·机器学习
z落落7 小时前
C#参数区别
java·算法·c#
c238568 小时前
vector(下)
数据结构·算法