![]() |
1
6
此代码需要O(N)时间,只需要三个整数的额外空间:
这使得两个整数用于存储位置,另一个整数用于临时存储
直觉 以下是我试图说明为什么从右到左的扫描会给你一个O(1)算法: 这个问题中的“自然时间”从左向右流动。因此,如果你从右向左扫描,你是在“从未来走向过去”,因此你不需要记住你当前位置右侧的字符。 测验 下面是一个随机测试,它使我确信解决方案是正确的:
测试生成的几个示例:
|
![]() |
2
5
不必创建输出就可以找到答案。您可以同时迭代这两个序列,并在第一个差异处停止。如果没有发现差异,并且两个序列同时终止,那么它们是相等的,否则它们是不同的。
但现在考虑一下这样的序列:
一些测试(都通过了,如果你有更多的优势案例请告诉我):
注:代码本身有几点需要注意:
奖金: 在实现我的想法之前,我已经想到了Tim的soltion,但是我很早就开始只对字符进行模式匹配,而且它不太适合,因为有些情况需要返回空间的数量。最后,我认为一种更简洁的方法是模式匹配和if条件的混合。下面是我更长的原始解决方案,上面我给出的是经过重构的Later:
|
![]() |
3
4
如果目标是最小化内存占用,那么很难反对迭代器。
另一方面,在争论FP主体时,很难为迭代器辩护,因为它们都是关于维护状态的。 |
![]() |
4
2
|
![]() |
Kon · OCaml中的模块类型语义 6 月前 |
![]() |
user20102550 · 如何在解析器中使用输入字符串 11 月前 |
![]() |
tijko · 处理整数数组时出现意外结果 1 年前 |
![]() |
David542 · 按列分区,按另一列排序 1 年前 |
|
Arnett Rufino · `max的输出是多少` 1 年前 |
![]() |
Adrian · 变量捕获:变量在函数闭包中的行为 1 年前 |