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

简介: golang力扣leetcode 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
}
目录
相关文章
|
6天前
|
存储 算法
LeetCode刷题---209. 长度最小的子数组(双指针-滑动窗口)
LeetCode刷题---209. 长度最小的子数组(双指针-滑动窗口)
|
6天前
|
Java
【LeetCode力扣】面试题 17.14. 最小K个数(top-k问题)
【LeetCode力扣】面试题 17.14. 最小K个数(top-k问题)
13 1
|
6天前
|
存储 算法
【LeetCode力扣】单调栈解决Next Greater Number(下一个更大值)问题
【LeetCode力扣】单调栈解决Next Greater Number(下一个更大值)问题
6 0
|
6天前
|
索引
leetcode代码记录(最长重复子数组
leetcode代码记录(最长重复子数组
13 0
|
6天前
leetcode代码记录(长度最小的子数组
leetcode代码记录(长度最小的子数组
11 0
|
6天前
【力扣】209. 长度最小的子数组
【力扣】209. 长度最小的子数组
|
6天前
|
算法 测试技术
每日一题:LeetCode-209. 长度最小的子数组(滑动窗口)
每日一题:LeetCode-209. 长度最小的子数组(滑动窗口)
|
6天前
|
存储 算法
力扣318 最大单词长度乘积
力扣318 最大单词长度乘积
|
6天前
|
算法
LeetCode题:581. 最短无序连续子数组,242. 有效的字母异位词,202. 快乐数
LeetCode题:581. 最短无序连续子数组,242. 有效的字母异位词,202. 快乐数
30 0
|
6天前
|
Java Go C++
Golang每日一练(leetDay0107) 去除重复字母、最大单词长度乘积
Golang每日一练(leetDay0107) 去除重复字母、最大单词长度乘积
32 0
Golang每日一练(leetDay0107) 去除重复字母、最大单词长度乘积

热门文章

最新文章