题目: 找出一个重复的值,要去不能开辟空间,并且不能暴力解
思路:快慢指针,两者相遇是在一个环中,而再依次递增就在切面点相遇了。证明这里省略(证明想了一上午,终于写出来了)~
public class Solution287 {
public int findDuplicate(int[] nums) {
int slow = 0;
int fast = 0;
while (true){
slow = nums[slow];
fast = nums[nums[fast]];
if(slow == fast)
break;
}
int point = 0;
while(true){
slow = nums[slow];
point = nums[point];
if(slow == point){
return slow;
}
}
}
}