如何判断一个整数数组中是否有重复元素?要求时间复杂度O(n),空间复杂度O(1)

题目:

写一个函数判断一个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. 结束条件比较复杂;

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页