![]() |
1
10
出于实际原因和合理的价值
为了让这个
在我的1.8GHz笔记本电脑上,这个解决方案在大约13秒的时间内执行1000000次迭代(即一次迭代大约需要0.013 ms,远低于100 ms)。 |
![]() |
2
6
您可以保留一个180个数字的数组,并将索引保存到最旧的一个,这样当新的数字出现时,您可以在 最老的 索引并增加索引模块180(比这要复杂一些,因为您需要对前180个数字进行特殊的操作)。 至于计算有多少个数字较小,我将使用蛮力的方法(迭代所有的数字和计数)。 编辑: 我觉得很有趣看到 "optimized" version 运行速度比这个简单的实现慢五倍(由于 @Eiko 用于分析)。我认为这是因为当您使用树和映射时,您会丢失数据位置,并有更多的内存错误(更不用说内存分配和垃圾收集)。 |
![]() |
3
3
把你的号码加到一张单子上。如果尺寸大于180,请删除第一个数字。 计数只是迭代180个元素,这可能足够快。很难从性能上击败对手。 |
![]() |
4
1
您可以使用LinkedList实现。 使用此结构,您可以轻松地操作列表的第一个和最后一个元素。 (addfirst,removefirst,…) 对于算法(找出有多少个数字是低/大的),列表上的一个简单循环就足够了,并且会在180的元素列表中给出少于100毫秒的结果。 |
![]() |
5
1
您可以尝试自定义链接列表数据结构,其中每个节点维护下一个/上一个引用以及排序后的下一个/上一个引用。然后插入变成了一个两阶段的过程,首先总是在尾部插入节点,然后插入排序,插入排序将返回小于x的数字计数。删除只是移除头部。 下面是一个例子,注:这是 非常讨厌 Java,它是纯粹的演示代码的示例代码。你明白了!另外,我只添加了一些项目,但它应该让您了解它的工作原理……最糟糕的情况是通过排序链接列表进行完整的迭代——我想这不会比上面的例子更糟吧?
|
![]() |
6
0
让缓存成为一个列表,这样您就可以在开始时插入,并让最旧的缓存在结束时删除。 然后在每次插入之后,只需扫描整个列表并计算所需的数字。 |
![]() |
7
0
|
![]() |
8
0
180个值不多,是一个简单的数组,暴力搜索和system.arraycopy()的速度应该超过1微秒(1/1000毫秒),并且不会引发GC。使用更复杂的收藏可能会更快。 我建议你保持简单,并在假设你需要优化它之前测量时间。 |
![]() |
RSW · Python-检查序列中的最后一个值是否相对高于其余值 1 年前 |
![]() |
mayen · Z-Score作为差异值的度量 1 年前 |
![]() |
John Philips · Python中的重命名函数 1 年前 |
![]() |
Yneedtobeserious · 给定的数据点,形成它们的关系 1 年前 |
![]() |
Idan Hazan · 转换总和为1的列表并保持值之间的关系[重复] 1 年前 |
|
Jimmy3421 · 为什么pd.cut会产生NaN值 1 年前 |
|
JoRayMe · 有没有办法从数据数组中识别浮点数中的小数位数? 2 年前 |