您的位置:首页 > 娱乐 > 八卦 > [M双指针] lc713. 乘积小于 K 的子数组(双指针+好题)

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

2024/12/23 7:21:13 来源:https://blog.csdn.net/yl_puyu/article/details/141441943  浏览:    关键词:[M双指针] lc713. 乘积小于 K 的子数组(双指针+好题)

文章目录

    • 1. 题目来源
    • 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)

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 最终可能会越界,超过 rres += r - l + 1;}return res;}
};

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com