【发布时间】:2021-01-16 10:38:38
【问题描述】:
给定一个数组,其数字范围从 1 到 n(不重复),其中 n = 数组的大小。
我们可以进行以下操作:
arr[i] = arr[arr[i]-1] , 0
现在,当我们对整个数组执行上述操作时,会考虑一次迭代。 我们的任务是在遇到之前遇到的序列后找到迭代次数。
Constraints :
a) Array has no duplicates
b) 1 <= arr[i] <= n , 0 <= i < n
c) 1 <= n <= 10^6
例 1:
n = 5
arr[] = {5, 4, 2, 1, 3}
After 1st iteration array becomes : {3, 1, 4, 5, 2}
After 2nd iteration array becomes : {4, 3, 5, 2, 1}
After 3rd iteration array becomes : {2, 5, 1, 3, 4}
After 4th iteration array becomes : {5, 4, 2, 1, 3}
In the 4th iteration, the sequence obtained is already seen before
So the expected output is 4.
这个问题是在一项招聘测试中被问到的,所以我没有任何指向该问题的链接。 给出了 2 个示例测试用例,我记得上面给出了一个。我非常感谢您对这个问题的任何帮助
附言
我能够编写蛮力解决方案,其中我将所有结果存储在一个 Set 中,然后继续前进到下一个排列。但它给了TLE
【问题讨论】:
-
你的问题是什么?您需要什么帮助?
-
是的,正如@StPiere 所说,我需要提示或算法。我无法想到任何最佳解决方案。我只能用蛮力编码,但它给了 TLE
-
@crazyCoder 你是如何将结果存储在一个集合中的?作为字符串?也许 Trie 数据结构更适合存储已经遇到的排列