如何判斷一個數組中的數值是否連續
一個整數數列,元素的取值可能是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;
}
}