当前位置:网站首页>【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]
边栏推荐
猜你喜欢
Cobalt Strike (CS) 逆向初探
Radondb mysql installation problems
「游戏建模干货」建模大师几步操作,学习经典,赶紧脑补一下吧
ECCV2022 | 用于视频问题回答的视频图Transformer
Shell编程之循环语句
分享即时通讯开发之WebSocket:概念、原理、易错常识、动手实践
Handler source code analysis
Reveal how the five operational management level of hundreds of millions of easily flow system
Don't look down upon the WebSocket!Long connection, stateful, two-way, full-duplex king is Fried
Redis 内存满了怎么办?这样置才正确!
随机推荐
BinaryIndexedTrees树状数组
普通用户如何利用小红书赚钱呢?小红书的流量是真的吗?
MySQL读写分离的三种实现方案
Execute the mysql script file in the docker mysql container and solve the garbled characters
ADS 2023 下载链接
Cobalt Strike (CS) 逆向初探
手把手教你定位线上MySQL慢查询问题,包教包会
MySQL【变量、流程控制与游标】
MySQL 主从,6 分钟带你掌握!
盘点在线帮助中心对企业能够起到的作用
LeetCode 622. Designing Circular Queues
redis常用命令,HSET,XADD,XREAD,DEL等
【C语言学习笔记(五)】while循环与for循环
安装radondb mysql遇到问题
红日安全内网渗透靶场-VulnStack-1
Handler source code analysis
盘点在线帮助中心对企业能够起到的作用
MySQL超详细安装教程 手把手教你安装MySQL到使用MySQL 最简单的MySQL安装方式,这种方式装,卸载也简单
ADS 2023 Download Link
relocation R_X86_64_PC32 against,/usr/bin/ld: final link failed: Bad value