当前位置: 首页 > 知识库问答 >
问题:

给定n个整数的数组中的重复[关闭]

哈沛
2023-03-14

想改进这个问题吗?更新问题,使其仅通过编辑这篇文章来关注一个问题。

你能展示一下你是否得到了一个由n个整数组成的数组吗。数组中的整数介于1和n-1之间。必须找到重复的整数。你需要在O(n)时间内完成,但你可以使用额外的空间。

输入格式:输入包含数组中的元素数,后跟数组中的元素。

输出格式:输出返回重复的整数,如果没有重复,则返回-1。

示例测试用例:

输入:5 1 4 3 2 3

输出:3

输入4 1 3 2 1

输出:1

共有3个答案

钱振
2023-03-14

假设这里有一个重复的算法---

(1) 创建阵列频率计数(1到n-1)。

(2) 仅扫描输入阵列一次,如果输入阵列中的第i个元素为m,则增加频率计数(m)。

(3) 扫描结束时,FrequencyCount中只有一个元素将为2,FrequencyCount中的每个其他元素将为1。

(4) 所以扫描FrequencyCount数组,如果数组中的第k个元素是2,那么唯一的重复项是k。

' Assuming , there will be exactly one duplicate
' here is VBA code

Function FindTheFuplicate(a() as integer) as integer
    dim n as integer, i as integer, m as integer
    n = ubound(a)
    redim FrequencyCount(1 to ubound(a)-1)
    for i = 1 to n
        'take the number in m
        m = a(i)
        FrequencyCount(m) = FrequencyCount(m) + 1 
    next i
    ' now exactly one FrequencyCountwill be 2 
    ' and all other FrequencyCount will be ONE
    for i = 1 to n - 1
         if FrequencyCount(i) = 2  then
             debug.print ("Duplicate = " & i )
             FindTheFuplicate = i
             exit function  
         end if
    next i
End Function
伯茂才
2023-03-14

有很多选择:

  • 排序并检查两个相同的连续元素
  • 使用从1到(n-1)(即(n-1)(n)/2)的整数和的公式,并求数组中每个元素的和。不同之处在于重复元素
  • 在遍历数组时,使用哈希集检查重复元素
周育
2023-03-14

这里最主要的是每个数字需要恰好出现一次。你可以这样做:

  1. 创建一个大小为n的新空数组,初始化为“0”
  2. 检查原始数组,为在原始数组中找到值的新数组中的每个索引写入“1”
  3. 如果有任何单元格/存储桶具有值,请检查新数组

这是O(n)的整体时间复杂度和O(n)的空间

 类似资料:
  • 我试着写一个代码,它接受一个介于1和1_000_000之间的整数,并返回一个比相同数字的整数大的最小整数,如果它不存在,则打印0。 举个例子 输入:156 输出165 输入330 输出0 输入27711 输出71127 我的问题是,下面的代码没有为其他输入返回正确的输出。 例如,在输入4231中,输出应该是4312。 我很难找到为每个输入返回正确输出的最佳算法。 TNX提前 }

  • 我想把一个整数变成一个金字塔。一、 E数字3: 因此,根据我找到的答案,我做了如下: 但它不起作用,而且是次优的。有没有一种简单的方法可以在同一行中重复整数n次? 也不是很高兴,但似乎我不能只使用System.out.println(int x, int n次)

  • 本文向大家介绍C ++中给定乘积的N个整数的最大GCD,包括了C ++中给定乘积的N个整数的最大GCD的使用技巧和注意事项,需要的朋友参考一下 假设我们有两个整数N和P。P是N个未知整数的乘积。我们必须找到这些整数的最大可能GCD。假设N = 3,且P = 24,则不同的组将像{1,1,24},{1,2,12},{1,3,8},{1,4,6},{2 ,2,6},{2,3,4}。GCD为:1、1、1

  • 我试图创建一个优先级队列,根据第一个元素的值对整数数组进行排序,但我遇到了一个问题,编译器抱怨在我的编译器lambda表达式中需要一个数组。知道我搞砸了什么吗?

  • 问题内容: 我有一个整数数组,我想计算重复出现的元素。首先,我读取数组的大小,并使用从控制台读取的数字对其进行初始化。在数组中,我存储了重复的元素。该数组存储元素连续出现的次数。然后,我尝试搜索重复序列并以特定格式打印它们。但是,它不起作用。 我希望输出看起来像这样: 例如: 如何找到重复的元素及其计数?如何如上所示打印它们? 问题答案: 字典(Java中的HashMap)可以轻松解决此类问题。

  • 可能的子集:- 我只能想到一个朴素的算法,它列出集合的所有子集,并检查子集和是否>=k,但它是一个指数算法,列出所有子集需要O(2^n)。我能用动态规划在多项式时间内求解吗?