描述
给出一个数组,找出重复了的一个数
解决
两个索引,分别走不同的步数,求到一个相遇点,然后再求重复的值。和找链表重复节点的那道题思路差不多
class Solution {
public:
int findDuplicate(vector<int>& nums) {
int length = nums.size();
int pos1 = length - 1, pos2 = length - 1;
while (true)
{
pos1 = nums[pos1] - 1;
pos2 = nums[nums[pos2]- 1] - 1;
if (pos1 == pos2)
break;
}
pos2 = length - 1;
while (true)
{
pos1 = nums[pos1] - 1;
pos2 = nums[pos2] - 1;
if (pos1 == pos2)
return pos1 + 1;
}
}
};