天天看點

資料結構與算法——判斷一個數組中的數值是否連續

如何判斷一個數組中的數值是否連續

一個整數數列,元素的取值可能是0~65535中的任意一個數,相同數值不會重複出現;0是例外,可以反複出現。設計一個算法,當從該數列中任意選取n個數值時,判斷這n個數值是否連續相鄰。需要注意以下4點:

  1. n個數值允許是亂序的
  2. 0可以通配任意數值
  3. 0可以多次出現
  4. 全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;
	}
}