我在一个论坛上看到了一个有趣的问题。
您有100个元素(从1到100),但是很容易出错,这些数字之一通过重复自身而与另一个重叠。例如1,99,3,…,99,100数组不是排序格式,如何找到重复编号?
我知道Hash可以做到O(n)时间和O(n)空间,我需要O(1)空间。
我们可以在O(n)和恒定空间中做到这一点:
index = Math.abs(a[i]) - 1
index
index+1
”
static int findDup(int[] a){ for(int i=0;i<a.length;i++){ int index = Math.abs(a[i]) - 1; if(a[index] < 0) return index+1; else a[index] = -1 * a[index]; } return -1; }