leetcode713 Subarray Product Less Than K

 1 """
 2 Your are given an array of positive integers nums.
 3 Count and print the number of (contiguous) subarrays where the product of all the elements in the subarray is less than k.
 4 Example 1:
 5 Input: nums = [10, 5, 2, 6], k = 100
 6 Output: 8
 7 Explanation: The 8 subarrays that have product less than 100 are: [10], [5], [2], [6], [10, 5], [5, 2], [2, 6], [5, 2, 6].
 8 Note that [10, 5, 2] is not included as the product of 100 is not strictly less than k.
 9 """
10 """
11 正确做法,双指针加滑动窗口
12 很是巧妙
13 pro为乘积,pro不断乘以nums[j]得到子数组乘积,满足条件小于k时
14 !!!
15 res +=(j-i+1),res是计数器。
16 滑动窗口内元素间的相互组合的数量
17 """
18 class Solution1:
19     def numSubarrayProductLessThanK(self, nums, k):
20         res, i = 0, 0
21         pro = 1 #乘积
22         if k <= 1:  # 对于案例nums=[1, 2, 3] k=0  和 nums=[1, 1, 1] k=1
23             return 0
24         for j in range(len(nums)):
25             pro = pro * nums[j]
26             while pro >= k:
27                 pro = pro // nums[i]
28                 i += 1
29             res += j - i + 1 #!!!这个很关键
30         return res
31 
32 """
33 我的解法超时,
34 对于输入nums = [1, 1, 1, 1......,1] k=5
35 """
36 class Solution2:
37     def numSubarrayProductLessThanK(self, nums, k):
38         res = 0
39         for i in range(len(nums)):
40             pro = 1
41             j = i
42             while j < len(nums):
43                 if nums[j] * pro < k:
44                     res += 1
45                     pro = nums[j] * pro
46                     j += 1
47                 else:
48                     break
49         return res

 

posted @ 2020-02-22 18:14  yawenw  阅读(158)  评论(0编辑  收藏  举报