找到3位数的后缀

时间:2016-03-10 13:34:30

标签: algorithm processing-efficiency

我的测试中遇到了这个问题,但我不知道如何解决这个问题"这两种问题都没有高效的执行时间..

号码x被称为" sufix"对于y,仅当通过在数字的左侧添加至少一个数字从x获得y时。示例:502是11502的sufix,因为如果你添加" 11"在" 502"前面你得到号码" 11502"。 文本文件包含一个数字数组,最大值为1.000.000.000,每个数字必须为0到1.000.000.000。在屏幕上显示,严格上升,数组中的每个数字,属于[100到999],它是数组中至少一个数字的sufix。如果数组不包含后缀编号,则在屏幕上显示消息"没有后缀编号"。 该算法必须在执行时有效。

如果我们有这个阵列" 11502 49 54321 6149 76149 123 123 502 4321 321 321",结果必须是" 321 502"

1 个答案:

答案 0 :(得分:2)

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

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

    • 如果您遇到2199,请设置has_suffix[199] = True。例如:

    • 如果遇到132,请忽略它。

    • 如果你遇到23,请忽略它。

  • 创建一个数组suffix,其条目为1000个布尔元素,每个元素设置为False

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

    • 如果您遇到2199,请忽略它。

    • 如果你遇到23,请忽略它。

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

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

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