algorithm - 找到长度为 3 的增加(或减少)子序列的数量?
问题描述
给定一个正整数数组,如何找到长度增加(或减少)的子序列的数量3
?例如,[1,6,3,7,5,2,9,4,8]
有24
这些,例如[3,4,8]
和[6,7,9]
。
我已经找到了 length 的解决方案k
,但我相信这些解决方案可以变得更有效率,因为我们只关注k = 3
.
例如,一个简单的O(n^3)
解决方案可以通过循环遍历元素并计算左侧有多少元素较少,右侧有多少较高,然后将这两个计数相乘并将其相加来更快地解决。这是O(n^2)
,显然不容易翻译成k > 3
。
解决方案
解决方案可以通过循环遍历元素,在每个元素上,您可以计算左侧有多少元素,而使用适用的分段树算法则更少O(log(n))
,通过这种方式,您可以计算右侧和更高的元素数量,然后相乘这两个计数,并将其添加到总和中。这是O(n*log(n))
.
您可以在此处了解有关分段树算法的更多信息: 分段树教程
推荐阅读
- r - 无法访问 dbplyr 中的字符串方法
- c# - 有没有办法合并两个具有相同键的对象数组,总结另一个属性的值?
- error-handling - Spring Integration - 如何将错误处理委托给单独的线程
- windows - 如何识别对 DLL 进行了哪些调用?
- reactjs - React material-ui grid:是否可以添加断点?
- angular - 如何调用订阅?
- highcharts - Highchart 动态绘制 Legend 标记并触发 mouseover 事件
- python - 在 python 中使用 ZMQ 记录器
- docker - 击中 Docker 容器时由对等方重置连接
- wikidata - 如何在 wikidata 上安装小工具?