更多C++数组面试题,见C++面试题系列数组
牛客网-C++校招面试题系列合集 132
一个长度为N的整形数组,数组中包含每个元素的取值范围是[0,n-1],判断该数组是否有重复的数,请说一下你的思路并手写代码.
解析:
把每个数放到自己对应序号的位置上,如果其他位置上有和自己对应序号相同的数,则有重复的数值.
时间复杂度:O(n)
空间复杂度O(1)
代码:
#include<iostream>
using namespace std;
bool IsDuplicateNumber(int *array, int n)
{
if (array == nullptr)
return false;
int temp = 0;
for (int i = 0; i < n; i++)
{
while (array[i] != i)
{
if (array[array[i]] == array[i])
return true;
temp = array[array[i]];
array[array[i]] = array[i];
array[i] = temp;
}
}
return false;
}
int main()
{
int R[4] = { 1,2,3,3 };
bool isdup=IsDuplicateNumber(R, 4);
cout << isdup << endl;
return 0;
}