当前位置:网站首页>【leetcode】剑指 Offer II 009. 乘积小于 K 的子数组(滑动窗口、双指针)
【leetcode】剑指 Offer II 009. 乘积小于 K 的子数组(滑动窗口、双指针)
2022-08-03 19:24:00 【friedrichor】
剑指 Offer II 009. 乘积小于 K 的子数组
给定一个正整数数组 nums
和整数 k
,请找出该数组内乘积小于 k
的连续的子数组的个数。
示例 1:
输入: nums = [10,5,2,6], k = 100
输出: 8
解释: 8 个乘积小于 100 的子数组分别为: [10], [5], [2], [6], [10,5], [5,2], [2,6], [5,2,6]。
需要注意的是 [10,5,2] 并不是乘积小于100的子数组。
示例 2:
输入: nums = [1,2,3], k = 0
输出: 0
提示:
- 1 < = n u m s . l e n g t h < = 3 ∗ 1 0 4 1 <= nums.length <= 3 * 10^4 1<=nums.length<=3∗104
- 1 < = n u m s [ i ] < = 1000 1 <= nums[i] <= 1000 1<=nums[i]<=1000
- 0 < = k < = 1 0 6 0 <= k <= 10^6 0<=k<=106
题解
这题和 【leetcode】剑指 Offer II 008. 和大于等于 target 的最短子数组(滑动窗口,双指针) 比较相似。
滑动窗口枚举
不出意外,这个又超时了
class Solution:
def numSubarrayProductLessThanK(self, nums: List[int], k: int) -> int:
def multiply(num_list): # 累乘
res = 1
for num in num_list:
res *= num
return res
num = 0
for size in range(1, len(nums) + 1):
for i in range(len(nums) + 1 - size):
sum_window = multiply(nums[i: i + size])
if sum_window < k:
num += 1
return num
双指针
class Solution:
def numSubarrayProductLessThanK(self, nums: List[int], k: int) -> int:
length = len(nums)
num = 0
left = 0
sum = 1
for right, value in enumerate(nums):
sum *= value
while sum >= k and left <= right:
sum /= nums[left]
left += 1
num += right - left + 1
return num
以 nums = [10,5,2,6], k = 100
为例:
right = 0
[10] 5 2 6 sum < k num += 0-0+1 = 1 [10]
right = 1
[10 5] 2 6 sum < k num += 1-0+1 = 2 [5] [10 5]
right = 2
[10 5 2] 6 sum = k
10 [5 2] 6 sum < k num += 2-1+1 = 2 [2] [5 2]
right = 3
10 [5 2 6] sum < k num += 3-1+1 = 3 [6] [2 6] [5 2 6]
边栏推荐
猜你喜欢
随机推荐
Postgresql源码(64)查询执行——子模块Executor(2)执行前的数据结构和执行过程
金鱼哥RHCA回忆录:CL210管理计算资源--管理计算节点+章节实验
分享即时通讯开发之WebSocket:概念、原理、易错常识、动手实践
Jingdong cloud released a new generation of distributed database StarDB 5.0
docker mysql 容器中执行mysql脚本文件并解决乱码
余弦距离介绍
awk语法-02-运算、数组、格式化输出
讯方实训云平台——加速教育高质量发展的“数字底座”!
力扣解法汇总899-有序队列
MySQL【变量、流程控制与游标】
[Notes] Introduction to machine learning
APT级全面免杀与企业纵深防御体系的红蓝对抗
如何理解即时通讯开发移动网络的“弱”和“慢”
Protobuf Grpc使用异常 类型有未导出的方法,并且是在不同的软件包中定义
ADS 2023 下载链接
Postgresql source code (65) analysis of the working principle of the new snapshot system Globalvis
「游戏建模干货」建模大师几步操作,学习经典,赶紧脑补一下吧
Postgresql-xl global snapshot and GTM code walking (branch line)
线上一次JVM FullGC搞得整晚都没睡,彻底崩溃
【C语言学习笔记(七)】C语言重定向输入与输出