在线性时间内找到第一个重复元素

时间:2017-07-30 20:41:16

标签: arrays algorithm

免责声明:这不是作业,也不是我要求您提供此问题的工作代码。

嗨大家好,我正在研究一个特定属性的问题,它允许用线性时间用O(1)额外的内存来解决它

问题在于:

  

给定大小为N的数组“A”,元素范围从1到N ,找到   线性时间内的重复元素,具有恒定的附加内存空间。

     

如果有多个重复对,则返回一个重复对   第二个元素的索引较低。

     

如果没有重复项,请返回-1。

     

示例:

     
      
  • A = [1,2,3,4] - > -1
  •   
  • A = [1,1,3] - > 1
  •   
  • A = [3,3,1,1,5] - > 1
  •   

使用地图和计算频率很容易解决这个问题,但我很好奇只使用O(1)的额外内存......

我知道1 + 2 + 3 + ... + N = (N*(N + 1)) / 2和这个事实的总和可能会对这个问题有所帮助,但我真的看不出我能比现有解决方案做得更好。

如果有人能为我揭开这一点,那就太棒了!

0 个答案:

没有答案