添加内容

This commit is contained in:
YDZ
2020-08-08 09:17:26 +08:00
parent 5015cc6b7b
commit fdba30f0c4
734 changed files with 4024 additions and 2129 deletions

View File

@ -0,0 +1,65 @@
# [713. Subarray Product Less Than K](https://leetcode.com/problems/subarray-product-less-than-k/)
## 题目
Your 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
## 解题思路
这道题也是滑动窗口的题目在窗口滑动的过程中不断累乘直到乘积大于 k大于 k 的时候就缩小左窗口有一种情况还需要单独处理一下即类似 [100] 这种情况这种情况窗口内乘积等于 k不小于 k左边窗口等于右窗口这个时候需要左窗口和右窗口同时右移
## 代码
```go
package leetcode
func numSubarrayProductLessThanK(nums []int, k int) int {
if len(nums) == 0 {
return 0
}
res, left, right, prod := 0, 0, 0, 1
for left < len(nums) {
if right < len(nums) && prod*nums[right] < k {
prod = prod * nums[right]
right++
} else if left == right {
left++
right++
} else {
res += right - left
prod = prod / nums[left]
left++
}
}
return res
}
```