长度为10的数组,0~9的数字无序且可重复,找出重复的数字,要求:时间复杂度O(n),空间复杂度O(1);
其实就是位图的思想
public class Main{
public static void main(String[] args) {
int[] arr = {1,1,1,1,2,4,4,6,6,6};
for (int i = 0; i < arr.length; i++) {
int index = arr[i];
if (index == i || index == -1){
continue;
}else if (index != arr[index] && arr[index] != -1){
int tmp = arr[i];
arr[i] = arr[index];
arr[index] = tmp;
i--;
}else if (index == arr[index]){
System.out.print(index + " ");
arr[index] = -1;
}
}
}
}
输出:
1 4 6
就ok了,当时面试的时候,就是没搞来三个相同的输出只输出一次的情况,现在把他置为-1代表曾经爱过,第三个相同时不用输出.