原题链接:寻找重复数
个人解法
思路:
可以遍历数组,将数组中的值放到其对应位置(不断交换),如果发现不是自己位置上的值和当前值相等,意味着此时已经见到了重复的值,直接返回即可。
然后才意识到不让修改数组,那么这种方法实际上不符合题意
代码:
class Solution {
public:
int findDuplicate(vector<int>& nums) {
int i;
for(i = 0;i < nums.size();i ++) {
while(nums[i] != i + 1) {
if(nums[i] == nums[nums[i] - 1]) return nums[i];
swap(nums[i], nums[nums[i] - 1]);
}
}
return nums[nums.size() - 1];
}
};