题目:
写一个函数判断一个int类型的数组是否是有效的。
所谓有效是指:假设数组大小为n,那么这个int数组里的值为0~n-1之间的数,并且每个数只能出现一次,否则就是无效数组。
例如[5,3,1,4,2,0]是有效的,[5,3,5,1,2,0]是无效的,[5,3,6,1,2,0]是无效的。
解法思路一:置换的思想
用一个temp来存储被置换出来的值,例如数组a:
5 3 1 4 2 0
首先,初始化时取第一个数5,将5放在数组的第5号位置,将原来的位置改为-1,5号被置换出来的值放在 temp。即,
-1 3 1 4 2 5 temp=0
下一步,将temp中的值放在a[temp]中:
0 3 1 4 2 5
接着,置换3:
0 -1 1 3 2 5 temp=4
0 -1 1 3 4 5 temp=2
0 -1 2 3 4 5 temp=1
0 1 2 3 4 5
排序成功,然后直接遍历一遍,后面的元素前前面的元素,值为0,则有重复。
优点:
只申请了一个元素的空间
缺点:
1. 结束条件比较复杂;
(