【问题标题】:Finding duplicate digits in integers查找整数中的重复数字
【发布时间】:2014-11-12 17:25:10
【问题描述】:

假设我们有一个由 N 个元素组成的整数数组,它由 0 到 10000 之间的整数组成。我们需要多次检测包含一个数字的数字,例如 1245 有效,而 1214 无效。我们如何才能以最佳方式做到这一点?谢谢!

【问题讨论】:

  • 根据您告诉我们的最佳方法是扫描整个数组并扫描数组中的每个元素。你的想法是什么?
  • 由于我们需要检查每个整数,是的,我认为我们必须扫描整个数组。但是,我认为真正的问题是如何有效地检测每个整数中的重复整数。
  • 你打算如何在不查看每个数字的情况下做到这一点?
  • 我们可以将每个数字与其他数字进行比较,但这会给我们 O(N^2) 对吗?有没有更好的、复杂度更低的解决方案?
  • 不是 O(n^2)。它是 O(n * d),其中n 是列表中的项目数,d 是每个数字的平均位数。而且,不,没有更好的解决方案。您必须查看每个数字中的每个数字。

标签: algorithm search


【解决方案1】:

你需要两个循环。一个循环,您扫描数组的每个元素。

在内部循环中,您根据您指定的条件确定给定元素是否有效。要确定一个数字是否多次具有相同的数字,您需要一个有效地逐个提取每个数字的例程。我认为最理想的方法是对数字执行“mod 10”,然后循环将原始数字除以 10。继续这样做,直到没有剩余数字(零)。现在您已经有了查看整数的每个数字的例程,确定是否存在重复数字的最佳方法是创建一个由 10 个布尔值组成的数组。从一个清除的数组开始。对于每个数字,将其用作 bool 数组的索引并将其设置为 true。如果您在设置之前在该位置再次看到“true”,则表示之前访问过 bool 数组中的元素,因此它是一个重复的数字。所以你完全跳出循环并说你发现了一个无效的值。

【讨论】:

    猜你喜欢
    • 2022-11-19
    • 2015-07-20
    • 2018-07-28
    • 1970-01-01
    • 1970-01-01
    • 2021-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多