713. 乘积小于 K 的子数组 滑动窗口

713. 乘积小于 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 <= nums.length <= 3 * 104
  • 1 <= nums[i] <= 1000
  • 0 <= k <= 106

思路:

  1. 遍历列表:

    • 使用 for 循环遍历列表 numsr 依次指向列表中的每个元素。
    • 在每次循环中,将当前 r 指向的元素乘以 s,更新乘积。
  2. 调整窗口:

    • 当 s 大于等于 k 时,说明当前窗口的乘积不满足条件,需要缩小窗口。
    • 通过将 s 除以 l 指向的元素,并将 l 向右移动一位,来缩小窗口。
    • 这个过程一直持续到 s 小于 k 或者 l 与 r 相等。
  3. 计算结果:

    • 如果 s 小于 k,说明当前窗口的乘积满足条件。
    • 此时,以 r 为右边界的满足条件的子数组个数为 r - l + 1,将其加入 ans

当 s(窗口内元素乘积)小于 k 时,以 r 为右边界的满足条件的子数组个数为 r - l + 1,原因如下:

假设当前窗口的左右边界为 l 和 r

  1. 子数组的个数计算方式:

    • 从左边界 l 开始到右边界 r 的连续子数组,其个数可以通过数学方式来计算。
    • 以 l 为起点,长度为 1 的子数组有 1 个,即 nums[l:r+1](这里切片是从 l 到 r,包含 r)。
    • 以 l + 1 为起点,长度为 2 的子数组有 1 个,即 nums[l + 1:r + 1]
    • 以此类推,直到以 r 为起点,长度为 r - l + 1 的子数组有 1 个,即 nums[r:r + 1]
  2. 推导过程:

    • 对于一个长度为 n 的连续区间,它的子数组个数为 1 + 2 + 3 +... + n
    • 根据等差数列求和公式,这个和为 n*(n + 1)/2
    • 在这里,区间长度为 r - l + 1,所以子数组个数就是 (r - l + 1)*((r - l + 1) + 1)/2
    • 化简后得到 (r - l + 1)*(r - l + 2)/2
    • 但实际上,不需要进行这么复杂的计算,因为这里只需要知道子数组的总数,而总数就是从 l 到 r 的连续元素个数,即 r - l + 1

例如,当 l = 1r = 3 时,子数组有 nums[1:4](长度为 3)、nums[2:4](长度为 2)、nums[3:4](长度为 1),一共 3 - 1 + 1 = 3 个。

class Solution(object):def numSubarrayProductLessThanK(self, nums, k):""":type nums: List[int]:type k: int:rtype: int"""l=0s=1ans=0for r in range(len(nums)):s*=nums[r]while s>=k and l<r:s/=nums[l]l+=1if s<k:ans+=r-l+1return ans

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1552152.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

半导体器件基础09:MOS管特性和应用(2)

说在开头&#xff1a;关于德布罗意的电子波&#xff08;1&#xff09; 德布罗意家族的历史悠久&#xff0c;他的祖先中出了许许多多将军、元帅、部长&#xff0c;参加过法国几乎所有的战争和各种革命&#xff0c;后来受到路易.腓力的册封&#xff0c;继承了这最高世袭身份的头…

数据中心交换机与普通交换机之间的区别到底在哪里?

号主&#xff1a;老杨丨11年资深网络工程师&#xff0c;更多网工提升干货&#xff0c;请关注公众号&#xff1a;网络工程师俱乐部 上午好&#xff0c;我的网工朋友。 数据中心交换被设计用来满足数据中心特有的高性能、高可靠性和可扩展性需求。 与此同时&#xff0c;普通交换机…

全面提升MySQL性能:从硬件到配置再到代码的最佳实践

MySQL 是全球最流行的开源关系型数据库管理系统之一&#xff0c;广泛应用于各种规模的应用程序中。随着应用规模的增长&#xff0c;数据库的性能优化成为提升系统整体性能的关键因素。本文将从多个角度探讨如何对MySQL进行性能优化&#xff0c;帮助开发者和DBA解决实际问题&…

免费 Oracle 各版本 离线帮助使用和介绍

文章目录 Oracle 各版本 离线帮助使用和介绍概要在线帮助下载离线文档包&#xff1a;解压离线文档&#xff1a;访问离线文档&#xff1a;导航使用&#xff1a;目录介绍Install and Upgrade&#xff08;安装和升级&#xff09;&#xff1a;Administration&#xff08;管理&#…

Android 13.0 系统wifi列表显示已连接但无法访问网络问题解决

1.前言 在13.0的系统rom产品定制化开发中,在wifi模块也很重要,但是在某些情况下对于一些wifi连接成功后,确显示已连接成功,但是无法访问互联网 的情况,所以实际上这时可以正常上网的,就是显示的不正常,所以就需要分析连接流程然后解决问题 如图所示: 2.系统wifi列表显示…

linux文件编程_进程

1. 进程相关概念 面试中关于进程&#xff0c;应该会问的的几个问题&#xff1a; 1.1. 什么是程序&#xff0c;什么是进程&#xff0c;有什么区别&#xff1f; 程序是静态的概念&#xff0c;比如&#xff1a; 磁盘中生成的a.out文件&#xff0c;就叫做&#xff1a;程序进程是…

【Python报错已解决】 Encountered error while trying to install package.> lxml

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

掌握 JVM 垃圾收集线程:简化 VM 选项

垃圾收集阶段对于任何 Java 应用程序都至关重要。主要目标是保持高吞吐量和低延迟之间的平衡。通过配置垃圾收集器&#xff0c;我们可以提高性能&#xff0c;或者至少推动应用程序朝着特定的方向发展。 垃圾收集周期越短越好。因此&#xff0c;分配给垃圾收集器的资源越多&…

RS485串口通信:【图文详讲】

RS485&#xff0c;RS的意义为Recommended Standard的缩写&#xff0c;也就是推荐标准&#xff0c;是一种常用的半双工-异步-串行通信总线。半双工的意思就是两者通信时&#xff0c;同一时刻&#xff0c;只能由其中一方发送&#xff0c;另一方只能接收&#xff0c;不可以同时收发…

Java 每日一刊(第18期):集合

文章目录 前言1. Java 集合框架概述1.1 Java 集合框架的定义和意义1.2 Java 集合框架的历史演进1.3 集合框架的基本组成部分1.4 Java 集合的优势1.5 Java 集合与数组的区别与关系 2. Java 集合框架的核心接口2.1 Collection 接口2.2 List 接口2.3 Set 接口2.4 Queue 接口2.5 Ma…

共享单车轨迹数据分析:以厦门市共享单车数据为例(九)

副标题&#xff1a;基于站点800m范围内评价指标探究——以吕厝站为例 上篇文章我们以厦门市为例&#xff0c;来通过POI和优劣解距离法&#xff08;TOPSIS&#xff09;来研究厦门岛内以800m作为辐射范围的地铁站哪些地铁站发展的最好&#xff0c;根据综合得分指数可以知道&…

【Linux】【操作】Linux操作集锦系列之七——Linux环境下如何查看CPU使用情况(利用率等)

&#x1f41a;作者简介&#xff1a;花神庙码农&#xff08;专注于Linux、WLAN、TCP/IP、Python等技术方向&#xff09;&#x1f433;博客主页&#xff1a;花神庙码农 &#xff0c;地址&#xff1a;https://blog.csdn.net/qxhgd&#x1f310;系列专栏&#xff1a;Linux技术&…

AutoGen实现多代理-Planning_and_Stock_Report_Generation(六)

1. 案例背景 本节内容是构建Agent组&#xff0c;通过广播模式&#xff0c;实现管理者对agent工作流的管理。本实验链接&#xff1a;传送门 2. 代码实践 2.1 环境设置 llm_config{"model": "gpt-4-turbo"}# 工作任务描述 task "Write a blogpost a…

Cyberduck网络鸭-访问远程文件客户端新选择

Cyberduck 是一款适用于 macOS 和 Windows 的自由文件传输客户端。适用于 Linux、macOS 和 Windows 的命令行界面 (CLI)。核心库用于Mountain Duck。 官网&#xff1a;https://cyberduck.io/download/ 开源地址&#xff1a; https://cyberduck.io/download/ 支持协议很多&…

国庆同欢,祖国昌盛!肌肉纤维启发,水凝胶如何重构聚合物

在这个国庆佳节&#xff0c;我们共同感受祖国的繁荣昌盛&#xff0c;同时也迎来了知识的探索之旅。今天来了解聚合物架构的重构的研究——《Hydrogel‐Reactive‐Microenvironment Powering Reconfiguration of Polymer Architectures》发表于《Advanced Science》。材料科学不…

消费电子制造企业如何使用SAP系统提升运营效率与竞争力

在当今这个日新月异的消费电子市场中&#xff0c;企业面临着快速变化的需求、激烈的竞争以及不断攀升的成本压力。为了在这场竞赛中脱颖而出&#xff0c;消费电子制造企业纷纷寻求数字化转型的突破点&#xff0c;其中&#xff0c;SAP系统作为业界领先的企业资源规划(ERP)解决方…

怀孕之天赋共享:其实人身体没变,完全是天赋共享

关于怀孕天赋共享&#xff0c;有人说&#xff0c;是不是怀孕导致身体变化&#xff1f; 并没有。下面这个就是案例。你总不能说&#xff0c;小孩生下来身体立即改变吧&#xff1f;

World of Warcraft [CLASSIC] Engineering 421-440

工程学421-440 World of Warcraft [CLASSIC] Engineering 335-420_魔兽世界宗师级工程学需要多少点-CSDN博客 【萨隆邪铁锭】421-425 学习新技能&#xff0c;其他都不划算&#xff0c;只能做太阳瞄准镜 【太阳瞄准镜】426、427、428、429 【随身邮箱】430 这个基本要做的&am…

基于SSM的农产品仓库管理系统【附源码】

基于SSM的农产品仓库管理系统&#xff08;源码L文说明文档&#xff09; 目录 4 系统设计 4.1 系统概要设计 4.2 系统功能结构设计 4.3 数据库设计 4.3.1 数据库E-R图设计 4.3.2 数据库表结构设计 5 系统实现 5.1 管理员功能介绍 5.1.1 用户管…

ios内购支付-支付宝APP支付提现

文章目录 前言一、IOS内购支付&#xff08;ios订单生成自己写逻辑即可&#xff09;1.支付回调票据校验controller1.支付回调票据校验server 二、安卓APP支付宝支付1.生成订单返回支付宝字符串&#xff08;用于app拉起支付宝&#xff0c;这里用的是证书模式&#xff09;2.生成订…