【发布时间】:2013-04-12 03:44:24
【问题描述】:
我有一个指针数组(这是算法,所以不要讨论语言细节)。大多数时候,这个数组指向数组之外的位置,但它会降级为数组中的每个指针都指向数组中的另一个指针。最终,这些指针形成了一个无限循环。
所以假设整个数组由指向数组中另一个位置的指针组成并且你从头开始,你怎么能找到在时间和空间上效率最高的循环长度?我相信最好的时间效率是 O(n),因为你必须遍历数组,而最好的空间效率是 O(1),虽然我不知道如何实现。
Index: 0 1 2 3 4 5 6
Value: *3 *2 *5 *4 *1 *1 *D
D 是在循环开始之前被指向的数据。在此示例中,循环为 1、2、5,它无限重复,但索引 0、3 和 4 不是循环的一部分。
【问题讨论】:
-
难道你不只是遍历指针,当你点击一个与你的起始指针指向的元素相同的元素时,结束搜索并计算你遍历的元素数量吗?
-
这些点是改变了还是从一开始就固定了?
-
总是有一个“循环”吗?会不会是零?可能不止一个吗?如果不止一个,您需要找到全部还是只找到一个?
-
不@Calpis,因为如果前两个或三个元素不是循环的一部分,但接下来的两个是?我将在我的问题中添加一个示例。
-
@MitchBukaner 我们将能够扫描阵列而无需担心更改。
标签: arrays algorithm pointers big-o infinite-loop