0
点赞
收藏
分享

微信扫一扫

golang力扣leetcode 713.乘积小于K的子数组

日月同辉9908 2022-05-05 阅读 26

713.乘积小于K的子数组

713.乘积小于K的子数组

713.乘积小于K的子数组

题解

题目:求乘积小于K的连续的子数组的个数

思路:

1.因为是连续的,所以可以用滑动窗口来做
2.如果当前这个数小于K,说明至少可以加1
3.如果乘积大于等于k,移动左指针,并缩小乘积
4.最后乘积必定小于k,那么ans+=right-left是什么意思呢?
5.[2,5,6],100   对于这种情况,答案有[6][2,5,6],[5,6]
6.其中[6]已经加过了,那么还剩两个,right-left=2

代码

func numSubarrayProductLessThanK(nums []int, k int) int {
	left, right := 0, 0
	ans, cnt := 0, 1
	for right < len(nums) {
		cnt *= nums[right]
		if nums[right] < k {
			ans++
		}
		for cnt >= k && left < right {
			cnt /= nums[left]
			left++
		}
		ans += right - left
		right++
	}
	return ans
}
举报

相关推荐

0 条评论