如何判断一个数组中的数值是否连续
一个整数数列,元素的取值可能是0~65535中的任意一个数,相同数值不会重复出现;0是例外,可以反复出现。设计一个算法,当从该数列中任意选取n个数值时,判断这n个数值是否连续相邻。需要注意以下4点:
- n个数值允许是乱序的
- 0可以通配任意数值
- 0可以多次出现
- 全0算连续,只有一个非0算连续
如果没有0的存在,要组成连续的数组,最大值和最小值的差距必须是n-1,存在0的情况下,只要最大值和最小值的差距小于n-1即可。所以找出数组中非0的最大值和非0的最小值,时间复杂度为O(n)
bool isContinuous(vector<int> a, int n)
{
int min = -1;
int max = -1;
for (int i = 0; i < n; i++)
{
if (a[i] != 0)
{
if (min > a[i] || min == -1)
{
min = a[i];
}
if (max < a[i] || max == -1)
{
max = a[i];
}
}
}
if (max - min > n - 1)
{
return false;
}
else
{
return true;
}
}