【问题标题】:Solution for checking repetitive elements in the matrix[1000][1000]检查矩阵中重复元素的解决方案[1000][1000]
【发布时间】:2015-03-14 15:25:23
【问题描述】:

需要编写检查矩阵[1000][1000]中重复元素的函数。如果找到任何重复元素,则返回 True,否则返回 False。

我认为需要通过两个步骤来解决: 1.将矩阵中的每个元素从小到大排序(在排序过程中我们可以检查元素是否相等)例如使用归并排序。 2. 从矩阵的第一个元素到最后一个元素,逐个比较前一个元素和下一个元素。

这个解决方案的效率是否足够好?

【问题讨论】:

  • @JerryGoyal OP 包含标签“c”而不是 c++
  • 如果够快就够快了... 最明显、最不优化的解决方案有时也够快。我们无法为您回答这个问题。写出你的算法。确保它是正确的。然后分析并决定是否应该加快速度。
  • 如果您要查找的只是重复的,您可以将矩阵折叠成一个数组(即 2D 到 1D),然后排序,然后比较连续元素是否相等。

标签: c arrays algorithm sorting matrix


【解决方案1】:

这是element distinctness problem,你的数组是否是二维的似乎并不重要,你可以将其视为“常规”数组,并使用元素区别的“常规”解决方案来解决它,即:

  1. 对数组进行排序,然后迭代元素并检查是否存在索引i 使得arr[i] == arr[i+1]
    这个解决方案是O(nlogn) 时间,假设高效排序,几乎不需要额外空间。
  2. 将元素存储在散列集中,并在插入每个元素时检查该元素是否已存在于集合中。
    此解决方案是O(n) 时间平均O(n^2) 时间最坏情况,需要O(n) 额外空间。

【讨论】:

  • 我不明白你是如何得到第 2 点的平均和最坏情况时间复杂度的,你能解释一下吗?是否与特定的哈希函数有关?
  • @sasha 哈希表的插入是 O(1) 平均情况和 O(n) 最坏情况,重复 n 个元素,你就会得到这种复杂性。
猜你喜欢
  • 2012-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-27
  • 2020-03-01
  • 1970-01-01
  • 2013-06-15
  • 2019-10-01
相关资源
最近更新 更多