如何在c中快速查找随机顺序数组
How to fast finding in a random order array in c
我正在实施快乐号码计划。 happy number是一个数字,当用每个数字的平方和代替时最终达到1
,如果序列中有2个重复数字,则该数字不是happy number。
例如:
7 --> 0^2 + 7^2 = 49 --> 4^2 + 9^2 = 97 --> 130 --> 10 --> 1 --> happy number
18 --> 65 --> 61 --> |37| --> 58 --> 89 --> 145 --> 42 --> 20 --> 4 --> 16 --> |37| --> not happy number
我的想法是把每次操作的结果存到一个数组中,然后遍历这个数组,检查这个数组是否有重数。但我认为这样做效率低下。
所以我想问下如何在随机顺序数组中快速找到一个元素,有没有更高效的程序解决方案?
如有任何帮助,我们将不胜感激。
请注意,对于 4 位数字,下一个数字是 9²+9²+9²+9² = 324,一个 3 位数字。
因此,对于任何 ≥ 4 位数字(无前导零),序列中的下一个数字明显减少,因此在达到最多 3 位数字之前,您不会有重复项。
然后,您可以创建一个名为 wasAlreadyCalculated[999]
的数组,用于通知该数字是否已在序列中计算。因此,当您更上一层楼时,您会检查该数字是否已被检查过。如果是,则您没有满意的号码。否则,您将该号码标记为已选中并继续继续,直到找到 1 或找到重复项。
不完全是最干净的方法,但它很有效并且有效。
我正在实施快乐号码计划。 happy number是一个数字,当用每个数字的平方和代替时最终达到1
,如果序列中有2个重复数字,则该数字不是happy number。
例如:
7 --> 0^2 + 7^2 = 49 --> 4^2 + 9^2 = 97 --> 130 --> 10 --> 1 --> happy number
18 --> 65 --> 61 --> |37| --> 58 --> 89 --> 145 --> 42 --> 20 --> 4 --> 16 --> |37| --> not happy number
我的想法是把每次操作的结果存到一个数组中,然后遍历这个数组,检查这个数组是否有重数。但我认为这样做效率低下。
所以我想问下如何在随机顺序数组中快速找到一个元素,有没有更高效的程序解决方案?
如有任何帮助,我们将不胜感激。
请注意,对于 4 位数字,下一个数字是 9²+9²+9²+9² = 324,一个 3 位数字。
因此,对于任何 ≥ 4 位数字(无前导零),序列中的下一个数字明显减少,因此在达到最多 3 位数字之前,您不会有重复项。
然后,您可以创建一个名为 wasAlreadyCalculated[999]
的数组,用于通知该数字是否已在序列中计算。因此,当您更上一层楼时,您会检查该数字是否已被检查过。如果是,则您没有满意的号码。否则,您将该号码标记为已选中并继续继续,直到找到 1 或找到重复项。
不完全是最干净的方法,但它很有效并且有效。