【问题标题】:How to fast finding in a random order array in c如何在c中快速查找随机顺序数组
【发布时间】:2022-01-16 14:51:50
【问题描述】:

我正在实施 Happy Number 计划。快乐数是用每个数字的平方和替换后最终达到1的数字,如果序列中有2个重复数字,则不是快乐数。

例如:

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

我的想法是将每个操作的结果存储到一个数组中,然后遍历该数组以检查该数组是否有重复的数字。但我认为这样做是低效的。

所以想问一下如何在随机顺序数组中快速找到一个元素,有没有更高效的方案解决方案?

任何帮助将不胜感激。

【问题讨论】:

    标签: arrays c find


    【解决方案1】:

    请注意,对于 4 位数字,接下来的数字是 9²+9²+9²+9² = 324,一个 3 位数字。

    因此,对于任何数量的 ≥4 位数字(不带前导零),序列中的下一个数字明显减少,因此在达到最大为 3 位数字的数字之前,您不会有重复。

    然后,您可以创建一个名为wasAlreadyCalculated[999] 的数组,用于通知该数字是否已在序列中计算。因此,当您更上一层楼时,您会检查该号码是否已被检查。如果是,你没有一个快乐的号码。否则,您将该数字标记为已选中并继续进行,直到找到 1 或找到重复项。

    不完全是最干净的方式,但它很有效并且有效。

    【讨论】:

    • 这样一个非常好的解决方案。非常感谢
    猜你喜欢
    • 2017-09-08
    • 1970-01-01
    • 2012-03-13
    • 2013-11-22
    • 2013-01-29
    • 2016-09-25
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    相关资源
    最近更新 更多