![]() |
1
3
你应该使用循环缓冲区 分配一个m+1指针数组,并通过列表为每个节点填写第(imodm+1)个指针。当你到达终点时,回过头来看看数组中的m(如果需要的话,可以绕一圈)。 这样,你就只有N个字了! 这里是一个C++的黑客作业示例程序
这应该由1个错误检查为关闭。 我的指针语法可能也有点偏离,但想法是有的。 |
![]() |
2
0
我喜欢递归的建议。但是,我不相信它会比问题中的双指针算法提高性能。 rubancache是正确的,因为数据结构不支持更快的操作。它是为慢速遍历而设计的,但插入时间很快。 |
![]() |
3
0
除了建议的计数式算法外,还可以使用类似于以下内容的递归函数:
当然,当函数返回您要查找的编号时,您会希望找到一种存储有问题的节点的好方法。 (编辑:这可能不比计数算法更有效,只是另一种选择) 不过,这个问题的真正答案是:您的数据结构(单链表)不便于快速实现要对其执行的操作,因此您应该选择一个新的数据结构。 |
![]() |
4
0
可以使用n+4M指针分配和日志(m)空间(好吧,额外的空间,您的列表已经占用n)。下面是如何实现的(这个想法和人们在返回调试器中使用的想法是一样的)。下面是伪代码,其中m<2^m,p是长度m的循环缓冲区
P[前面]现在是你的答案 |
![]() |
5
-1
我觉得更好的是:
例如,如果n=3,它看起来像:
所以f跟踪head-n-counter,n跟踪head-counter,你只需要做一些事情(n+m+n/m),而不是o(2*n-m)。 |
![]() |
Sweepy Dodo · JSON lite的格式化 5 月前 |
![]() |
giantjenga · 优化整数向量到二进制向量的转换 7 月前 |
![]() |
Zegarek · Postgresql递归查询未提供预期结果 7 月前 |
![]() |
Joe · 为什么这两个查询之间的性能存在如此大的差异? 10 月前 |
![]() |
tic-toc-choc · 在`dplyr中高效使用列表进行过滤` 11 月前 |
![]() |
Mohan · 是否有一种更快的方法来编写代码,从1:N中提取许多随机样本? 11 月前 |
![]() |
user2980746 · 在C#字典中键入xyz对的最有效方法是什么? 11 月前 |