当前位置: 首页 > web >正文

[滑动窗口]越短越合法(可转化成越长越合法)

题目链接

题意

给你一个整数数组 nums 和一个整数 k ,请你返回子数组内所有元素的乘积严格小于k 的连续子数组的数目。

首先当ans增加时 我们认为r固定

方法一、转化成越长越合法

思路

算出乘积 ≥ k \ge k k的子数组数量
再用所有子数组数量减去上面算出来的cnt

Code

class Solution {public int numSubarrayProductLessThanK(int[] nums, int k) {if(k <= 1) return 0;int n = nums.length, l = 0, r = 0;long all = (n+1)*n >>1, now = 1, cnt = 0;while(r < n){int x = nums[r++];now *= x;while(now >= k && l < n){int y = nums[l++];now /= y;}cnt += l;//当内部循环结束时,当前窗口无效//但对于左端点在 [0,l] 范围内的 [left,r],都是有效的}return (int)Math.max(0,all - cnt);}
}

方法二

越短越合法的方法

Code

class Solution {public int numSubarrayProductLessThanK(int[] nums, int k) {if(k <= 1) return 0;int n = nums.length, l = 0 ,r = 0, ans = 0;int now = 1;while(r < n){int x = nums[r++];now *= x;while(now >= k){int y = nums[l++];now /= y;}ans += r-l;//内层循环结束时 目前窗口才合法//也就意味着这个窗口内的子数组都合法//右端点r固定 所以l在[l,r]范围内都合法}return ans;}
}
http://www.xdnf.cn/news/6210.html

相关文章:

  • 【每天一个知识点】模型轻量化(Model Compression and Acceleration)技术
  • 麒麟环境下Selenium的使用
  • 语音识别-2
  • 【Oracle专栏】清理告警日志、监听日志
  • 【进程控制二】进程替换和bash解释器
  • 【数据库复习】SQL语言
  • Java生成可控的Word表格功能开发
  • 《世界经济浪潮中的AI变革与展望》
  • 涨薪技术|0到1学会性能测试第64课-SQL监控之Trace选项
  • 第二讲:电源滤波器设计与仿真-基于单管反激电源
  • 三维CAD皇冠CAD(CrownCAD)建模教程:工程图模块一
  • FPGA:Xilinx Kintex 7实现DDR3 SDRAM读写
  • Axure设计之内联框架切换页面、子页面间跳转问题
  • day20-线性表(链表II)
  • Adobe DC 2025安装教程
  • Leetcode数组day1
  • 深度学习—BP神经网络
  • Ascend的aclgraph(八)AclConcreteGraph:capture_end
  • 网络编程超时检测,unix域套接字,粘包
  • WPF Datagrid 数据加载和性能
  • Spring的 @Validate注解详细分析
  • 【springcloud学习(dalston.sr1)】Ribbon负载均衡(七)
  • 【行为型之模板方法模式】游戏开发实战——Unity标准化流程与可扩展架构的核心实现
  • 数据库MySQL学习——day10()
  • FFMPEG 与 mp4
  • elpis-core: 基于 Koa 实现 web 服务引擎架构设计解析
  • LeetCode 热题 100_颜色分类(98_75_中等_C++)(技巧)(计数;双指针)
  • git push 报错:send-pack: unexpected disconnect while reading sideband packet
  • 鸿蒙OSUniApp 开发的下拉刷新与上拉加载列表#三方框架 #Uniapp
  • “堆”和“栈”