总和大于给定值的子数组的数量

2024-03-29

给定一个数组N整数(正数和负数),找出连续的总和大于或等于的子数组K(也可以是正数或负数)

I have managed to work out a naive O(N2) solution, is it possible to get better?


是的,可以在O(n log n) time.

  1. 让我们看一下前缀和。总和一个(L, R]子数组是prefixSum[R] - prefixSum[L].

  2. 这意味着我们可以计算这样的数量L and R that L < R and prefixSum[R] - prefixSum[L] >= K, 意思是prefixSum[L] <= prefixSum[R] - K.

  3. 让我们从左到右迭代前缀和数组,并维护一个可以有效执行以下操作的数据结构:

    • 添加一个新元素。
    • 查找小于或等于给定数字的元素数量。

    为此,我们可以使用平衡二叉搜索树。

这是该解决方案的伪代码:

tree = an empty search tree
result = 0
// This sum corresponds to an empty prefix.
prefixSum = 0
tree.add(prefixSum) 
// Iterate over the input array from left to right.
for elem <- array:
    prefixSum += elem
    // Add the number of subarrays that have this element as the last one
    // and their sum is not less than K.
    result += tree.getNumberOfLessOrEqual(prefixSum - K) 
    // Add the current prefix sum the tree.
    tree.add(prefixSum)
print result

时间复杂度为O(n log n)因为有O(n)添加和计算元素数量操作,每个操作都可以在O(log n).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

总和大于给定值的子数组的数量 的相关文章

  • 为无向无权图实现推重标签算法 s-t 最小割边

    我正在寻找一个好的解决方案来在无向和未加权图中找到 s t 最小切割边 我想使用推送重新标记算法 但我不确定如何实现它以在无向和未加权图上找到最小割 在每对顶点之间有两条反向边 并在所有边上赋予相同的权重 并应用推送重新标记算法 我可以用这
  • 如何在 dijkstra 算法中以 O(log n ) 时间更新优先级队列中的键?

    过去一周我一直在研究 dijkstra 算法 我在 java 中有正确的运行代码 它使用数组来计算标准 findMin 函数 该函数为您提供距离最小的顶点 显然它是 O n 现在我希望使用优先级队列 最小堆 来实现它 我的思考过程是 whi
  • 4 x 3 锁图案

    我遇到了这个 它要求计算在 4x3 网格中可以制作特定长度的锁定图案的方式数 并遵循规则 可能有些点不能包含在路径中 有效的模式具有以下属性 图案可以使用第一次接触的点序列来表示 与绘制图案的顺序相同 从 1 1 到 2 2 的图案与图案不
  • 两个非嵌套循环的大 O 表示法

    对于两个非嵌套的 for 循环 大 O 表示法是什么 Example for int i 0 i
  • 加密成本高,解密成本低

    我希望该用户 攻击者加密数据并发送给服务器 现在我想要一种与标准算法完全相反的算法 使用快 难以解密 即很难使用服务器发送的密钥来加密密码等数据 以防止随机攻击 但很容易解密这样服务器在验证用户时消耗的时间非常少 但是对于攻击者来说 每次使
  • 哪种数据聚类算法适合检测时间序列事件中未知数量的聚类?

    这是我的场景 考虑在不同地点和时间发生的一组事件 例如 考虑有人在高空记录暴风雨期间城市中的雷击 就我的目的而言 闪电是瞬时的 只能击中某些位置 例如高层建筑 还可以想象每次雷击都有一个唯一的 ID 以便以后可以参考该雷击 这个城市大约有1
  • 合并字符数组中的最小重复次数

    假设我有两个数组 我想合并它们 以便合并后的数组具有最小重复次数 例如 x x 是重复 arr1 x d d m f m arr2 d d x f f m 唯一的条件是在合并数组中 元素来自arr1 and arr2必须出现在各自的订单中a
  • cordova 使用什么 js“引擎”?

    Cordova 使用什么 JS 引擎 它是特定于平台的还是跨所有平台的一个标准 意味着 iOS 的 safari 和 Android 的 chrome 以及 Windows 可能的 IE 标准 或者跨所有平台的 Cordova JS 引擎
  • Exposé 布局算法

    我正在制作一些项目 其布局类似于 Mac OS X 在 Expos 中对窗口所做的操作 它适应项目的长宽比和可用区域的长宽比 基本上 可用区域分为行和列 每个单元格 行和列的交集 中放置一个项目 这些项目必须保持其纵横比 此处width h
  • 用惯用的 Scala 更新大型数据结构

    我已经尝试 Scala 一段时间了 并且经常遇到支持不可变数据结构的建议 但是当你有一个像这样的数据结构时3D 场景图 大型神经网络或任何具有大量需要频繁更新的对象的东西 对场景中的对象进行动画处理 训练神经网络 这似乎是 运行时效率极低
  • 字符串排序真的是 O(n^2logn) 吗? [复制]

    这个问题在这里已经有答案了 我读了以下内容 排序需要 O NlogN 那么它怎么是 O N 2logN 我们在这里想念的是 两个字符串的比较不是 O 1 在最坏的情况下 需要 在 所以最终的复杂度是O N 2logN 它是否正确 我一直认为
  • 如何查找给定字符串中仅出现一次的第一个字符[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • C# 中类似图的实现

    所以我有一个对象 我们称之为 Head 它有一个对象列表 C C1 C2 C3 T T1 T2 和 M M1 M2 并且所有这些都是相互关联的 例如 Head gt C1 C2 C3 T1 T2 M1 M2 T1 gt C1 C2 T2 g
  • 使用主方法求解 T(n) = 2T(n/2) + n/log n 和 T(n) = 4T(n/2) + n/log n 之间的差异

    我最近偶然发现了一个资源 其中 2T n 2 n log ntypeMM 宣布复发无法解决 我接受它作为一个引理 直到今天 另一种资源被证明是矛盾的 在某种意义上 根据资源 下面的链接 其中的 Q7 和 Q18 是建议 分别在问题中的1和2
  • 寻找距离原点最近的 100 颗恒星的算法

    首先让我提出正确的问题 问 有一个文件包含超过一百万个点 x y 每个点代表一颗星星 a b 处有一颗行星地球 现在 任务是构建一种算法 返回距离地球最近的 100 颗恒星 您的算法的时间和空间复杂度是多少 这个问题在各种采访中被问过很多次
  • 在 Python 中进行模糊键查找的最佳方法?

    我遇到一个问题 我需要在哈希映射中进行模糊查找 即返回与最接近查询的键相对应的值 在我的例子中是通过 Levenshtein 距离测量的 我目前的方法是子类化dict使用特殊的查找方法计算所有键的编辑距离 然后返回得分最低的键的值 基本上是
  • 时间复杂度和运行时间有什么区别?

    时间复杂度和运行时间有什么区别 它们是一样的吗 运行时间是指程序运行所需的时间 时间复杂度是对输入大小趋于无穷大时运行时间渐进行为的描述 您可以说运行时间 是 O n 2 或其他什么 因为这是描述复杂性类和大 O 表示法的惯用方式 事实上
  • 无需构建树即可预测霍夫曼压缩比

    我有一个二进制文件 我知道其中每个符号出现的次数 如果我要使用霍夫曼算法压缩它 我需要预测压缩文件的长度 我只对假设的输出长度感兴趣 而不对单个符号的代码感兴趣 因此构建霍夫曼树似乎是多余的 作为一个例子 我需要得到类似的东西 包含 4 个
  • 将字符串中的“奇怪”字符转换为罗马字符

    我需要能够将用户输入仅转换为 a z 罗马字符 不区分大小写 所以 我感兴趣的角色只有26个 然而 用户可以输入他们想要的任何 形式 的字符 西班牙语 n 法语 e 和德语 u 都可以包含用户输入中的重音符号 这些重音符号会被程序删除 我已
  • 数组中连续元素的最大乘积

    我在现场面试的时候被问到了这个算法问题 由于没有要求我签署保密协议 我将其发布在这里寻求答案 给定一个数组REAL不包含 0 的数字 找到产生最大乘积的连续元素 该算法应在线性时间内运行 我考虑过以下方法 使用两个数组 第一个是利用DP思想

随机推荐

  • Angular:将curl 转换为Angular $http POST 请求

    我有这条卷曲线 curl X POST H content type application json H AUTH TOKEN vLC4grMuKbtbamJL3L6x localhost 8080 v1 segments appkey
  • 使用 NHibernate 查询

    我是 NHibernate 的新手 我正在尝试学习如何查询我的数据 下面是配置 xml 仅显示食谱 我希望能够通过输入的关键字按菜谱标题查询菜谱 还有成分名称中的成分 例如 您可以输入 意大利面酒 这是我尝试过的 但给了我一个错误 hql
  • 如何使用 c 中最少的库跟踪鼠标输入

    我不知道在哪里可以找到这些信息 但我想知道如何使用 c 中最少的非标准库来获取鼠标输入 或任何隐藏输入 基本上 c 中是否有相当于鼠标 和其他输入 输入的 stdio 或者是否有一个最小且在多个平台上交叉兼容的库 只需能够将鼠标坐标打印到终
  • 将对象添加到 NSMutableArray 属性

    这是我的数据结构 group 1 n id name elements 1 n 我为具有所有属性的元素定义一个类 为组定义一个类 如下所示 interface Group NSObject NSInteger groupID NSStrin
  • 如何通过模拟选择器和/或 redux 存储来编写 Redux Saga 测试

    Context 我是编写 Redux Saga 测试的新手 并且一直在使用反应样板 https github com react boilerplate开发一个应用程序 该应用程序使用 Jest 进行测试 样板文件非常模块化且复杂 我什至不
  • 如何学习编写惯用的 C++ 代码 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我最近强迫自己学习 C 并且刚刚读完 Herbert Schildt 所著的 C 完整参考 一书 我喜
  • 在 Rails 中创建博客档案

    控制器 class PostsController lt ApplicationController def index posts Post published respond to do format format html index
  • 您所知道的最难理解的 C++ 代码是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • C++ 标准库函数的函数重载

    我有一个免费的功能作为课程的一部分 在类的构造函数中我正在做一些malloc运营 所以在destructor我正在尝试释放那段记忆 但是 VS10 编译器抱怨说 free pointer 与我的类的自由函数的签名不匹配 所以问题是在一个类中
  • Asp.net 中的异步 Web 服务

    如何在 ASP NET 中设置异步 Web 服务 我想调用网络服务将一些数据发布到数据库 但我不关心响应是失败还是成功 我只能使用 net 2 0或3 5 它可以是vb或c 当您在 Visual Studio 中创建服务引用时 单击 高级
  • 哪些类型可以声明为 const?

    在 C 中 哪些类型可以声明为const const int i 0 const double d 0 const decimal m 0 const referenceType null 有完整的清单可供我参考吗 Well MSDN ht
  • 子目录中的 Ember 组件

    我读到现在支持在 components 中包含目录 文件夹 使用 ember cli 我可以生成所需的必要子目录 组件 但是 我似乎无法引用该组件 例如 如果我有这样的文件夹结构 app components sub test comp j
  • 访问 Angular ui-calendar 中的 fullcalendar 对象

    我正在尝试访问 ui calendar 中的 fullcalendar 对象 文档说我需要做的就是给日历属性一个名称 div 然后 您应该能够像这样访问日历 uiCalendarConfig calendars myCalendar 这对我
  • 在 Mac os x Snow Leopard 上编译 Bochs

    有人能够在 Snow Leopard 下编译 Bochs 模拟器吗 Leopard 对我来说工作得很好 但在 Snow Leopard 下我遇到了很多与 Carbon 库相关的问题 好的 我们要求提供更多信息 我在 shell 上使用 ma
  • INSERT INTO 语句中的情况

    我正在尝试设置ActionReq当未提供 ActionReq 时 将此存储过程的列设置为 Expiration AdvancedCancel 的值 ActionReq和 Expiration 是日期时间 AdvancedCancel 是 i
  • 线程不更新进度条控件 - C#

    我有一个带有自定义进度条的自定义表单 在主类 主线程 中生成 然后我生成一个线程并向其发送 ThreadStart 函数 此线程启动函数应该更新自定义控件中的进度条 但没有 class MyClass Custom form with pr
  • 尝试思考如何在 Angular 2 中构建多步表单

    我正在尝试构建一个小型的三步表单 它会类似于这样 我在 React 中执行此操作的方法是使用 redux 来跟踪表单完成情况并根据步骤号 0 1 2 渲染表单主体标记 在 Angular 2 中 什么是做到这一点的好方法 这就是我目前正在尝
  • 使用 Flexbox 将元素与底部对齐

    我正在尝试使用 Flexbox 将 DIV 与底部对齐align content flex end 并尝试align self flex end 没有运气 我在这里做错了什么 我想align content对齐 好吧 内容到任何允许的高度
  • 当前端/后端位于两个不同的域时,CSRF 保护如何为我提供比 CORS 控制更高的安全性?

    如果我有 一个域上的 Web 前端 另一个域上的 REST API 通过设置 header 将 REST API 服务器配置为仅允许来自 Web 前端域的跨源请求Access Control Allow Origin到 Web 前端域 除了
  • 总和大于给定值的子数组的数量

    给定一个数组N整数 正数和负数 找出连续的总和大于或等于的子数组K 也可以是正数或负数 I have managed to work out a naive O N2 solution is it possible to get bette