Description
给定一个包含
假设
你设计的解决方案必须 不修改 数组
Constraints
Solution
不考虑位置关系可以使用置换法。也就是说使得
考虑位置关系的话推荐看这里的题解。其中一种解法是使用建图的方法,为每一个
题目的要求很高。但是参数给出的是vector&
而不是const vector&
,那就别怪我不客气了。
Code
class Solution {
public:
int findDuplicate(vector<int>& nums) {
int *off = nums.data() - 1;
int n = nums.size() - 1;
for(int i = 1; i <= n; ++i) {
// Assert: off[i] > 0.
while(off[i] != off[off[i]]) {
swap(off[i], off[off[i]]);
}
if(off[i] != i) return off[i];
}
return off[n+1];
}
};