[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;
    }
};
相关推荐
2401_872418784 小时前
算法入门:数据结构-堆
数据结构·算法
xwz小王子5 小时前
手术机器人登上Science Robotics:2毫米纤细手臂,从3厘米切口完成腰椎神经减压
算法·机器人
黎阳之光6 小时前
视频孪生智护供水生命线:黎阳之光赋能医疗与园区水务高质量升级
运维·物联网·算法·安全·数字孪生
Black蜡笔小新6 小时前
自动化AI算法训练服务器DLTM制造业AI质检工作站助力制造业实现AI智检
人工智能·算法·自动化
嵌入式小能手7 小时前
飞凌嵌入式ElfBoard-进程间的通信之命名管道
linux·服务器·算法
啦哈拉哈7 小时前
Leetcode题解记录-hot100(81-100)
算法·leetcode·职场和发展
csdn_aspnet7 小时前
Java 霍尔分区算法(Hoare‘s Partition Algorithm)
java·开发语言·算法
诸葛务农7 小时前
道路行驶条件下电动汽车永磁电机的有效使用寿命及永磁体的失效和回收再利用(下)
java·开发语言·算法
snow@li7 小时前
AI:理解 大数据、算法、算力、电力、生成式AI、token 之间的关系
大数据·人工智能·算法
小智老师PMP8 小时前
零基础能不能考PMP?零基础专属学习路径+全套扶持体系
学习·算法·职场和发展·软件工程·求职招聘·敏捷流程