Arrays 在n个整数的未排序数组中检测整数重复的算法。(使用2个嵌套循环实现)

Arrays 在n个整数的未排序数组中检测整数重复的算法。(使用2个嵌套循环实现),arrays,algorithm,nested-loops,Arrays,Algorithm,Nested Loops,您将获得一个由n个整数组成的未排序数组,您希望查找数组中是否有重复项(即任何整数出现多次)。 描述一种算法(用两个嵌套循环实现)。 我对算法的描述: 在步骤1中,我们编写一个while循环来检查数组是否为空/空,如果数组不为空,则继续执行内部循环。 第2步,我们现在编写一个for循环来运行n-1的迭代,在该循环中,我们将分配给current(variable)数组中的第一个索引(在第一次迭代中),并在每次迭代中通过index+1更新当前变量,这意味着第一次,current将保存数组中的第一个索引

您将获得一个由n个整数组成的未排序数组,您希望查找数组中是否有重复项(即任何整数出现多次)。 描述一种算法(用两个嵌套循环实现)。

我对算法的描述:

在步骤1中,我们编写一个while循环来检查数组是否为空/空,如果数组不为空,则继续执行内部循环。
第2步,我们现在编写一个for循环来运行n-1的迭代,在该循环中,我们将分配给current(variable)数组中的第一个索引(在第一次迭代中),并在每次迭代中通过index+1更新当前变量,这意味着第一次,current将保存数组中的第一个索引,第二次保存数组中的第二个索引,依此类推,直到循环结束。
第3步,我们将在for循环中写入一个循环(在第2步中使用),以将当前数字与数组中的所有整数进行比较,如果整数等于下一个数字,则我们将使用printf语句打印该数字,否则更新下一个以保留数组中的下一个索引,并使用该索引与当前变量进行比较,直到将其与数组中的所有整数进行比较,并且一旦完成此操作,当前变量将被更新以存储数组的下一个索引,并将该特定数字与数组中的所有整数进行比较

算法正确吗?(根据问题)。。。您的建议将不胜感激。不!这不是家庭作业之类的问题。谢谢你抽出时间

以简化的方式,复杂性肯定是O(N^2)=N*((N+1)/2)O(N^2)

编辑:
我添加了一个更有效的算法描述(在下面的问题中)。但是回到上面的问题,它是否适合作为考试问题的答案?(这已经在以前的文章中出现过,因此我非常感谢您的帮助)

如果我们限制输入数据以实现某种最佳情况,您如何限制输入数据以实现更好的大O复杂性?描述一种算法,用于处理这些有限的数据,以查找是否存在任何重复数据。什么是大O复杂性?

如果我们将数据限制在,比方说,数组大小为5(n=5),我们可以将复杂性降低到O(n)。如果数组被排序,那么我们只需要一个循环来比较数组中的每个元素和下一个元素,这将发现是否存在重复项。这仅仅意味着,如果给定给我们的数组在默认情况下(或幸运地)已经排序(从最低值到最高值),在这种情况下,将从O(N^2)减少到O(N)因为我们不需要内部循环来比较整数进行排序,因为它已经被排序了,所以我们可以实现一个循环来比较整数和它的后续整数,如果遇到重复,那么我们可以使用printf语句来打印重复项,并继续迭代循环n-1次(应该是4)-完成后结束程序。该算法的最佳情况是O(N),因为性能线性增长,与输入/数据的大小成正比,因此如果我们有一个大小为50(数组中有50个整数)的排序数组,那么迭代将是N-1(循环将迭代50–1次),其中n是数组的长度,即50。此算法中的运行时间与输入大小成正比。这意味着在排序数组中,执行操作所需的时间完全取决于数组的输入大小


p、 当然,还有其他算法效率更高、速度更快,但从我的知识和问题的要求来看,第一个问题要求的是更高的大o复杂度,我相信这个算法可以做到这一点。(如果我错了,请纠正我)-谢谢:)

您描述了三个循环,但第一个循环实际上只是一个条件(如果为null或为空,则中止)

剩下的算法听起来不错,除了我说的“current将保存数组中的第一个索引”(挑剔的人坚持C中的索引总是0)“current将保存数组中第一个元素的值”之类的


顺便说一句(虽然我知道这是一个实践作业),它的效率非常低(我认为n^2是正确的)。我强烈要求在数组上只做一个循环,在某种排序结构中复制选中的数字,并在其中进行二进制搜索。(作为一名教师,我会让我的学生先描述一棵平衡树,这样他们就可以在这里使用它,就像虚拟图书馆一样;-)。

也许这个想法是让他们现在就学习坏的方法,这样他们以后就可以将它与更好的方法进行对比?一点优化就是让第二个循环不覆盖“所有元素”但是只有在剩下的部分上,因为在那里会检测到具有前面元素的DUP。(OP的(N+1)/2似乎表明了这个想法,但为什么是+1?)。这也会解决OP的附加问题。@Markransem,你说得对!下面的问题要求我们修改算法,以表示“最佳”情况,而不是“最差”情况(这将是通常的情况)。我已经接近了默认情况下要排序的数据(交给我们时),并将数据限制在,比如说5。这将使我们在已经排序的数组中将O(N^2)减少到O(N)。我们现在只需要一个循环来检查重复(例如,如果当前==下一个-发现重复)else迭代外部循环并更新current以存储数组中的下一个元素,并与当前的+1元素进行比较。迭代n-1次(本例中为n=5)@PeterSchneider很抱歉我不了解循环类型,但您能否提供一个我可以实现的循环,而不是“While”,因为