当前位置: 首页 > 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;}
}

相关文章:

  • 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数据到金蝶云星空
  • 小耳朵等来了春天:公益义诊筛查专家走进安徽安庆
  • 著名植物学家、园艺学家,国际植物园协会原主席贺善安逝世
  • 从能源装备向应急装备蓝海拓展,川润股份发布智能综合防灾应急仓
  • 工人日报评规范隐藏式车门把手:科技美学须将安全置顶
  • 人民币对美元即期汇率盘中创半年新高,离岸市场升破7.2
  • 科学家用AI寻找外星生命