文章目录

  • 1. 题目
  • 2. 解题

1. 题目

一个数组的 分数 定义为数组之 乘以 数组的长度

比方说,[1, 2, 3, 4, 5] 的分数为 (1 + 2 + 3 + 4 + 5) * 5 = 75
给你一个正整数数组 nums 和一个整数 k ,请你返回 nums 中分数 严格小于 k 的 非空整数子数组数目。

子数组 是数组中的一个连续元素序列。

示例 1:
输入:nums = [2,1,4,3,5], k = 10
输出:6
解释:
有 6 个子数组的分数小于 10 :
- [2] 分数为 2 * 1 = 2 。
- [1] 分数为 1 * 1 = 1 。
- [4] 分数为 4 * 1 = 4 。
- [3] 分数为 3 * 1 = 3 。
- [5] 分数为 5 * 1 = 5 。
- [2,1] 分数为 (2 + 1) * 2 = 6 。
注意,子数组 [1,4] 和 [4,3,5] 不符合要求,
因为它们的分数分别为 10 和 36,但我们要求子数组的分数严格小于 10 。示例 2:
输入:nums = [1,1,1], k = 5
输出:5
解释:
除了 [1,1,1] 以外每个子数组分数都小于 5 。
[1,1,1] 分数为 (1 + 1 + 1) * 3 = 9 ,大于 5 。
所以总共有 5 个子数组得分小于 5 。提示:
1 <= nums.length <= 10^5
1 <= nums[i] <= 10^5
1 <= k <= 10^15

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/count-subarrays-with-score-less-than-k
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 以每个数字 nums[i] 为 左端点的 子数组,有多少个右端点满足条件呢
  • 题目总的数字都是正数,sum*len 是单调递增的,可以进行二分查找,查找最右边的位置 j,满足条件 sum[i: j]*(j-i+1) < k
class Solution:def countSubarrays(self, nums: List[int], k: int) -> int:n, prevsum = len(nums), [0]*len(nums)for i in range(n):prevsum[i] = (0 if i==0 else prevsum[i-1]) + nums[i]def partsum(prevsum, i, mid):return (prevsum[mid]-(0 if i==0 else prevsum[i-1]))*(mid-i+1)def bs(prevsum, i, r, k):l = iwhile l <= r:mid = (l+r)//2s = partsum(prevsum, i, mid)if s >= k:r = mid-1else:if mid==n-1 or partsum(prevsum, i, mid+1) >= k:return mid-i+1else:l = mid+1return 0ans = 0for i in range(n):ans += bs(prevsum, i, n-1, k)return ans

6264 ms 26.8 MB Python3


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 2302. 统计得分小于 K 的子数组数目(前缀和+二分查找)相关推荐

  1. 2022-6-13 咒语和药水的成功对数,替换字符后匹配,统计得分小于 K 的子数组数目,......

    1. 咒语和药水的成功对数 You are given two positive integer arrays spells and potions, of length n and m respec ...

  2. 209 长度最小的子数组(前缀和+二分查找、滑动窗口)

    1. 问题描述: 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组,并返回其长度.如果不存在符合条件的子数组,返回 0. 示例: 输入:s = ...

  3. 【枚举 + 求最大公约数方法】最大公约数等于K的子数组数目问题

    慢一点是为了快一点,加油,大家 ,不要放弃 ! -- 2022/11/13 一.题目描述: 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 nums 的子数组中元素的最大公因数等于 k ...

  4. 最大公因数等于 K 的子数组数目求解全过程

    题目:给你一个整数数组 nums 和一个整数 k ,请你统计并返回 nums 的子数组中元素的最大公因数等于 k 的子数组数目. 子数组 是数组中一个连续的非空序列. 数组的最大公因数(Greates ...

  5. LeetCode 713. 乘积小于K的子数组(滑动窗口)

    1. 题目 给定一个正整数数组 nums. 找出该数组内乘积小于 k 的连续的子数组的个数. 示例 1: 输入: nums = [10,5,2,6], k = 100 输出: 8 解释: 8个乘积小于 ...

  6. 11. Leetcode 713. 乘积小于K的子数组 (数组-同向双指针-滑动窗口)

    给定一个正整数数组 nums和整数 k .请找出该数组内乘积小于 k 的连续的子数组的个数.示例 1:输入: nums = [10,5,2,6], k = 100 输出: 8 解释: 8个乘积小于10 ...

  7. LeetCode 560. 和为K的子数组(前缀和差分)

    1. 题目 给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数. 示例 1 : 输入:nums = [1,1,1], k = 2 输出: 2 , [1,1] 与 [1,1 ...

  8. leetcode713. 乘积小于K的子数组(双指针)

    给定一个正整数数组 nums. 找出该数组内乘积小于 k 的连续的子数组的个数. 示例 1: 输入: nums = [10,5,2,6], k = 100 输出: 8 解释: 8个乘积小于100的子数 ...

  9. LeetCode 497. 非重叠矩形中的随机点(前缀和+二分查找)

    文章目录 1. 题目 2. 解题 1. 题目 给定一个非重叠轴对齐矩形的列表 rects,写一个函数 pick 随机均匀地选取矩形覆盖的空间中的整数点. 提示: 整数点是具有整数坐标的点. 矩形周边上 ...

最新文章

  1. 从终端运行React Native App时出错(iOS)
  2. 求出歌手的得分python_哪位大侠帮我做做python的题目啊,做其中5个就好。跪求啊...
  3. 感知机数据算法的对偶形式
  4. ITK:排序ITK索引
  5. [ ArcGIS for Server 10.1 系列 ] - 分布式部署GIS Servers
  6. 纪中A组模拟赛总结(2021.7.12)
  7. sqoop2安装详细过程[截图说明]
  8. 监控流媒体服务器连接监控摄像头的配置方式 - GB28181和ONVIF
  9. C# ASPX页面做上传提示:超过了最大请求长度,解决方法
  10. android recyclerview添加头部,Android RecyclerView添加Header头部
  11. wpf 自动完成comboxBox
  12. windows 安装 telnet 工具
  13. 机器学习与数据挖掘的区别(一点个人理解)
  14. 平面设计构图是什么,平面设计基本构图原则和形式是什么:夏雨老师
  15. ios打没有签名的ipa包
  16. 《科技创业启示录》一第2章 克里斯·巴顿、菲利普·安格布瑞希、迪拉伊·慕克吉、艾弗里·王 科技创业启示录...
  17. Tryhackme -Skynet(考点:smb 密码爆破 cuppa RFI cronjob - tar提权)
  18. 浏览器打开网址https显示不能访问怎么办?
  19. c语言和c 自学,自学C语言最常遇到的七个问题
  20. 【知识图谱】03图谱设计(使用Protege)

热门文章

  1. linux 目录的粘滞位,Linux浅谈SUID,SGID,Sticky粘滞位对目录以及文件的相关作用
  2. 当字节跳动也开始裁员
  3. html盒子处在中心,如何让文字处于盒子正中心啊
  4. 智慧医院建设包含哪些方面?
  5. 必须要理解掌握的贝塞尔曲线
  6. 连续梁混凝土徐变次内力(想了好久orz)
  7. 为什么公司都让你对薪资保密?
  8. 全球前十大IC设计公司最新排名公布
  9. 性能测试失败原因之性能测试十宗罪
  10. 【故障处理】windows系统开机后内存占用过高