判断一个数组中数据是否有重复,其中元素大小不超过len-1
例子 1,2,3,4,5,5
有重复
2,3,1,4,5
无重复
暴力求解法,时间复杂度O(n²)
直接遍历他所有的数据,看是否重复
bool arr_same(int buf[],int len)
{
if (buf == nullptr || len <= 0)
return false;
for (int i = 0; i < len - 1; i++)
{
for (int j = i; j< len - i - 1; j++)
{
if (buf[i] == buf[j+1])
return true;
}
}
return false;
}
使用数组下标进行优化,时间复杂度O(n)
我们通过数组下标快速访问的遍历,过程是先访问第m个元素,之后看是否和他的下标相同,不同的话就和下标位置的数进行比较,如果不同的话就交互,相同的话就说明出现了重复
bool arr_same1(int buf[], int len)
{
//判空
if (nullptr == buf || len <= 0)
return false;
//判断满足条件
for (int i = 0; i < len ; i++)
{
if (buf[i]<0 || buf[i]>len - 1)
return false;
}
//寻找对的数
for (int i = 0; i < len ; i++)
{
while (buf[i] != i)
{
if (buf[i] == buf[buf[i]])
return true;
int tem = buf[buf[i]];
buf[buf[i]] = buf[i];
buf[i] = tem;
}
}
return false;
}
测试用例
测试用例:
- 单个和多个重复数据
- 无重复数据
- 空指针