免责声明:这不是作业,也不是我要求您提供此问题的工作代码。
嗨大家好,我正在研究一个特定属性的问题,它允许用线性时间用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
和这个事实的总和可能会对这个问题有所帮助,但我真的看不出我能比现有解决方案做得更好。
如果有人能为我揭开这一点,那就太棒了!