查找 3 位后缀

Finding 3-Digit Suffixes

我在测试时遇到了这个问题,但我不知道如何解决"think the problem",这类问题也没有有效的执行时间..

数字 x 被称为 "sufix" y,前提是 y 是通过在数字左侧至少添加一位数字从 x 中获得的。示例:502 是 11502 的后缀,因为如果您在“502”前面添加“11”,您将得到数字“11502”。 文本文件包含一个数字数组,最多 1.000.000.000 个数字,每个数字必须从 0 到 1.000.000.000。在屏幕上显示,严格升序排列,数组中的每个数字,属于[100到999],并且它是至少一个数组中数字的后缀。如果数组不包含后缀数字,则在屏幕上显示消息 "No sufix number"。 该算法在执行时必须高效。

如果我们有这个数组“11502 49 54321 6149 76149 123 123 502 4321 321 321”,结果必须是“321 502”

  • 创建一个包含 1000 个布尔元素条目的数组 has_suffix,并将每个元素设置为 False

  • 遍历每一行。对于一行中的每个数字i,如果超过999,则找出最后三位数字i_,并设置has_suffix[i_] = True

    • 如果你运行变成2199,设置has_suffix[199] = True。例如:

    • 如果你运行变成132,忽略它。

    • 如果你运行变成23,忽略它。

  • 创建一个包含 1000 个布尔元素条目的数组 suffix,并将每个元素设置为 False

  • 在每一行上再次迭代。对于一行中的每个数字i,如果它在100和999之间且has_suffix[i] == True,则设置suffix[i] = True。例如:

    • 如果你运行变成2199,忽略它。

    • 如果你运行变成23,忽略它。

    • 如果您在 132 中 运行,请检查 has_suffix[132]。如果是True,则设置suffix[132] = True.

  • 从 100 到 999 遍历 suffix 的条目,并打印出 True 的条目的索引。例如,

    • 如果 True 的唯一索引是 321 和 502,则打印“321”和“502”。