zoukankan      html  css  js  c++  java
  • [LeetCode] 713. Subarray Product Less Than K

    You are given an array of positive integers nums.

    Count and print the number of (contiguous) subarrays where the product of all the elements in the subarray is less than k.

    Example 1:

    Input: nums = [10, 5, 2, 6], k = 100
    Output: 8
    Explanation: The 8 subarrays that have product less than 100 are: 
    [10], [5], [2], [6], [10, 5], [5, 2], [2, 6], [5, 2, 6]. Note that [10, 5, 2] is not included as the product of 100 is not strictly less than k.

    Note:

    • 0 < nums.length <= 50000.
    • 0 < nums[i] < 1000.
    • 0 <= k < 10^6.

    乘积小于K的子数组。题目即是题意,也是比较经典的滑动窗口的题。一开始我试图用prefix sum做后来觉得没必要,滑动窗口的思路即可解决问题。唯一需要注意的是乘积是大于等于K。解释一下代码15行为什么start <= end 因为有可能子数组里面只有一个元素,而且这个元素小于K。至于为什么res +=的部分最后还要+ 1,是因为right和left都是坐标,如果两者在相同的位置上的话,res就等于0了,故而需要额外 + 1。

    时间O(n)

    空间O(1)

    Java实现

     1 class Solution {
     2     public int numSubarrayProductLessThanK(int[] nums, int k) {
     3         // corner case
     4         if (nums == null || nums.length == 0) {
     5             return 0;
     6         }
     7 
     8         // normal case
     9         int product = 1;
    10         int left = 0;
    11         int right = 0;
    12         int res = 0;
    13         while (right < nums.length) {
    14             product *= nums[right];
    15             while (left <= right && product >= k) {
    16                 product /= nums[left];
    17                 left++;
    18             }
    19             res += right - left + 1;
    20             right++;
    21         }
    22         return res;
    23     }
    24 }

    sliding window相关题目

    LeetCode 题目总结

  • 相关阅读:
    TensorFlow基础篇
    MySql分类
    VISUAL STUDIO 调试
    排序分类
    位分类
    Visio分类
    工作线程AfxBeginThread的使用
    Windows Live Writer配置步骤
    用户界面线程AfxBeginThread的使用
    WIndows 相关知识
  • 原文地址:https://www.cnblogs.com/cnoodle/p/13082620.html
Copyright © 2011-2022 走看看