1
3
我的解决方案是:快速和慢速的ptrs,将列表的一半反转,并与另一半进行比较。然后将颠倒的那一半倒过来,这样列表看起来就会像原来的一样。我正在寻找更好的解决方案。 因为我找不到更好的溶胶。 |
2
2
以下应该在o(n)中执行。
您可以通过保留列表长度的计数来改进此解决方案,并在达到列表的一半后停止比较。 如果字符串中的字符数大于允许的最大堆栈深度,这将不起作用。在这种情况下,更改列表的工作方式如下… 找出列表的长度。
|
3
2
您可以使用随机化在O(n)时间和O(1)空间中完成它。 步骤1:计算字符串的散列值,例如整个字符串的指纹。 步骤2:反转链接列表。 步骤3:计算反转字符串的哈希值。 步骤4:将链接列表反转为其原始顺序。 可以在O(n)时间和O(1)空间中按如下方式反转链接列表:
|
4
1
把清单翻一遍,找出它的长度 然后您可以检查字符i==字符长度-i对于i=0到长度/2 在O(n^2)时间内运行并使用O(1)存储 |
5
0
这是一个蛮力算法,希望你能理解。
虽然\u指向的迭代器\的代码(请原谅我的糟糕命名)是:
|
6
0
根据他们告诉你的要求,这里有他们想要的解决方案。 1)找到列表的中点。您可以通过使用两个指针并增加两个节点和一个节点来实现这一点。当第一个指针到达末尾时,第二个指针将位于列表的中间节点。 2)将链接列表从中间反转到末尾。你可以在线性时间内做到这一点。 3)现在比较两个列表。 4)通过再次反转恢复先前反转的列表。 最好的方法是编写一个函数来在线性时间内反转列表,并将其用作ispaLindRome函数的助手。这将清除代码,并使在白板上管理更容易。 |
7
0
也许你可以做一个分而治之的解决方案:
请注意,应重复步骤3
更详细的复杂性分析:
使用替代(
空间复杂性是
|
8
0
这个看起来很酷。 假设您有一个链接列表node1->node2->node3->->noden。 设SUM1=SUM2=0 你所要做的就是遍历列表一次然后计算
比较它们是否相等 如果相等
其他的
时间复杂度:o(n) 空间复杂性:O(1) |
9
0
|
GabrielChu · 如何释放带有指针的链表 6 年前 |
Link · 向链表中添加结构似乎不起作用 6 年前 |
Jheel rathod · 带有构造函数的ocaml递归类型记录 6 年前 |
amr125 · 在链表中插入元素-索引不存在 6 年前 |
JOSI · 求职面试的基本内容-使用链表、数组 6 年前 |
Sikorski · 是否有必要对仅用于删除操作的列表进行同步 6 年前 |
Pushkar Mahajan · 如何避免分段核心转储错误? 6 年前 |