[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;
    }
};
相关推荐
Lucky_ldy17 小时前
C语言学习:动态内存管理(数据结构关键)
c语言·数据结构·学习
凌波粒17 小时前
LeetCode--100.相同的树(二叉树)
算法·leetcode·职场和发展
alexwang21117 小时前
P16473 [GKS 2013 #B] Sudoku Checker题解
c++·算法·题解·洛谷
无敌昊哥战神17 小时前
【机器学习扫盲】从预测 Score 到ACC、 Precision、Recall、ROC 曲线的白话全解
python·深度学习·算法·机器学习
奔跑的Ma~17 小时前
第6篇:蓝桥杯C++进阶突破(难题拆解+算法优化,冲刺国赛高奖)
c++·算法·蓝桥杯·#蓝桥杯备战·#c++编程·编程竞赛
数智工坊17 小时前
MPC引导的策略搜索:用模型预测控制训练安全高效的无人机深度控制策略
论文阅读·人工智能·算法·无人机
Lenyiin17 小时前
《LeetCode 顺序刷题》81 - 90
算法·leetcode
ZPC821017 小时前
双目相机 深度图和点云生成物体3D包围盒 生成抓取姿态
人工智能·数码相机·算法·yolo·计算机视觉
rGzywSmDg17 小时前
如何在Dev-C++中配置TDM-GCC编译器
开发语言·c++·算法
邪修king17 小时前
C++ 二叉搜索树 (BST) 超全详解:核心原理、完整实现、性能分析与使用场景
数据结构·c++·bst·二叉树搜索树