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

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

题目链接

题意

给你一个整数数组 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.dtcms.com/a/191089.html

相关文章:

  • docker-compose的使用总结
  • Linux下的c/c++开发之操作Redis数据库
  • select、poll、epoll
  • MySQL库级管理:数据库管理与存储引擎剖析
  • kafka connect 大概了解
  • idea挂掉,会导致进程不结束,切换profile环境,导致token认证不通过
  • Linux Bash | Capture Output / Recall
  • Android Studio Meerkat与Gradle构建工具升级实战指南
  • 同设备访问php的多个接口会有先后等待问题
  • 电机的导程和脉冲之间的关系
  • Rust入门之高级Trait
  • 嵌入式学习笔记DAY20(链表,gdb调试)
  • 前端~三维地图(cesium)动态材质飞线
  • 香橙派/树莓派读取GY39数据
  • QMK键盘编码器(Encoder)(理论部分)
  • 实战案例:采集 51job 企业招聘信息
  • 安卓system/文件夹下的哪些文件夹可以修改为别的设备的
  • SRM电子采购管理系统:Java+Vue,集成供应商管理,实现采购流程数字化与协同优化
  • 麒麟环境下Selenium的使用
  • 如何高效集成MySQL数据到金蝶云星空
  • Spring的 @Validate注解详细分析
  • 力扣-108.将有序数组转换为二叉搜索树
  • idea 启动Springboot项目在编译阶段报错:java: OutOfMemoryError: insufficient memory
  • VS Code 新旧版本 Remote-SSH 内网离线连接服务器方法(版本 ≤ 1.78.x 及 ≥ 1.79.0)
  • 实验五:以太网UDP全协议栈的实现(通过远程实验系统)
  • 代码随想录算法训练营Day58
  • CSP信奥赛新增的算法-马拉车算法(Manacher‘s Algorithm)
  • 初识java
  • git切换分支后需要pull吗
  • cGAS-STING通路