C 检查矩阵中重复元素的解决方案[1000][1000]
需要编写检查矩阵中重复元素的函数[1000][1000]。如果发现任何重复元素,则返回True;如果没有,则返回False 我认为需要通过两个步骤来制定解决方案: 1.例如,使用合并排序将矩阵中的每个元素从小到大排序(在排序过程中,我们可以检查元素是否相等)。 2.从矩阵中的第一个元素到最后一个元素,逐个比较上一个元素和下一个元素 这个解决方案的效率足够好吗 这就是问题所在,而且数组是2D似乎并不重要,您可以将其视为“常规”数组,并使用元素区分度的“常规”解决方案进行求解,即:C 检查矩阵中重复元素的解决方案[1000][1000],c,arrays,algorithm,sorting,matrix,C,Arrays,Algorithm,Sorting,Matrix,需要编写检查矩阵中重复元素的函数[1000][1000]。如果发现任何重复元素,则返回True;如果没有,则返回False 我认为需要通过两个步骤来制定解决方案: 1.例如,使用合并排序将矩阵中的每个元素从小到大排序(在排序过程中,我们可以检查元素是否相等)。 2.从矩阵中的第一个元素到最后一个元素,逐个比较上一个元素和下一个元素 这个解决方案的效率足够好吗 这就是问题所在,而且数组是2D似乎并不重要,您可以将其视为“常规”数组,并使用元素区分度的“常规”解决方案进行求解,即: 对数组排序,然后
i
,以便arr[i]==arr[i+1]
。
这个解决方案是
O(nlogn)
time,假设排序效率高,只需要很少的额外空间此解决方案平均为
O(n)
time,最坏情况为O(n^2)
time,需要O(n)
额外的空间@JerryGoyal OP包含了标记“c”而不是c++如果它足够快,那么它足够快。。。最明显、优化最少的解决方案有时足够快。我们不能为你回答这个问题。写下你的算法。确保它是正确的。然后分析并决定是否应该加快速度。如果您所要寻找的是重复的,您可以将矩阵折叠成一个数组(即2D到1D),然后排序,然后比较连续元素是否相等。我不知道第2点中的平均和最坏情况时间复杂度是如何得到的,您能解释一下吗?它是关于一个特定的哈希函数吗?@sasha哈希表的插入是O(1)个平均大小写和O(n)个麦汁大小写,重复n个元素,你就得到了这种复杂性。