数组中重复的数字_JAVA_中等
数组中重复的数字
http://www.nowcoder.com/questionTerminal/623a5ac0ea5b4e5f95552655361ae0a8
备忘录
- 开辟新空间,值为n的存在下标为n+1的位置
- 要开辟额外空间
public boolean duplicate(int numbers[],int length,int [] duplication) { if(numbers == null) { return false; } int[] cache = new int[length]; // 备忘录记录 for(int num : numbers) { if(cache[num] == 0) { cache[num] = 1; } else { duplication[0] = num; return true; } } return false; }
交换法
- 从第一个开始,该值和下标不同就交换,相同就下一个,直到走完
- 不能保证找出第一个最小值
public boolean duplicate(int numbers[],int length,int [] duplication) { if(numbers == null) { return false; } int i = 0; while(i < length) { if(numbers[numbers[i]] != numbers[i]) { int temp = numbers[numbers[i]]; numbers[numbers[i]] = numbers[i]; numbers[i] = temp; } else if(i == numbers[i]){ i++; } else { duplication[0] = numbers[i]; return true; } } return false; }