假设nums长度的为n,所有元素的值均属于[0,n-1],没有重复值。将其排序。
for(int i = 0; i < nums.size(); i++)
while(nums[nums[i]] != nums[i]) swap(nums[num[i]], nums[i]);
f(f(x)) = f(x),等价于f(x)=x (在大多数情况下成立,起码在代码空间可以近似成立,欢迎数学大佬补充)
nums[nums[i]] = nums[i],等价于nums[i]=i。 也就是最终稳态条件
for(int i = 0; i < nums.size(); i++)
while(nums[i] != i) swap(nums[nums[i]], nums[i]);
上诉的解法不够鲁棒,当nums存在重复元素时,会出现死循环。
而nums[nums[i]] != nums[i]条件不仅可以达到nums[i]=i的稳态,同时还可以避免死循环。