Q: 在一个具有n个元素大小的数组中,所有元素排序在0~n-1范围内并且所有元素不重复,对数组中的元素进行排序。
A: 此时使用原地置换算法,时间复杂度O(N),空间复杂度O(1),明显优于其他的排序算法
剑指offer 03.数组中重复的数字
分析
//将我们指针对应的元素放到属于他的位置(索引对应的地方)。我们可以这样理解,每个人都有自己的位置,
//我们需要和别人调换回到属于自己的位置,调换之后,如果发现我们的位置上有人了,则返回。
class Solution {
public:
int findRepeatNumber(vector<int>& nums) {
int size = nums.size();
for(int i = 0; i < size; i++){
//保证nums数组的排列顺序是0,1,2,3...
while(i != nums[i]){
if(nums[i] == nums[nums[i]]) return nums[i];
int& x = nums[i];
int& y = nums[nums[i]];
(x == y) || (x ^= y), (y ^= x), (x ^= y);
}
}
return -1;
}
};