方法一:位图法,原理是首先申请一个长度为n且均为’0’组成的字符串,字符串的下标即为数组a[]中的元素,然后从头开始遍历数组a[N],取每个数组元素的值,将其对应的字符串中的对应位置置1,如果已经置过1,那么该数就是重复的数。由于采用的是位图法,所以空间复杂度比较大,为O(N).
代码如下:
#include "stdafx.h"
#include
#include
bool xor_findDup(int * arr, int NUM)
{
int *arrayflag = (int *)malloc(NUM*sizeof(int));
int i = 1;
while (i < NUM)
{
arrayflag[i] = false;
i++;
}
for (i = 0; i < NUM; i++)
{
if (arrayflag[arr[i]] == false)
{
arrayflag[arr[i]] = true;
}
else
return true;
}
}
int main()
{
int a[] = {1,7,4,2,1,4,3,1};
if (xor_findDup(a, 8))
printf("存在重复元素")