第一种,先排序,再比较
int isContinuousArray(int a[], int len){//判断数组是否连续
int i=0,count_0=0;
for (i = 0; i < len; ++i) {//先排序
if (a[i]==0)
count_0++;
for (int j = i; j < len; ++j) {
if (a[i]>a[j]){
int temp = a[j];
a[j] = a[i];
a[i] = temp;
}
}
}
for (i = 0; i < len-1; ++i) {
if (a[i]!=0){
int com = a[i+1]-a[i];
if (com>1)
count_0-=com;
if (count_0<0)
return 0;
}
}
return 1;
}
第二种,思考问题后,发现若数组中元素连续,0为通配符,则非0值中的最大值与最小值的差不大于数组长度-1
int isContinuousArray1(int a[], int len){//判断数组是否连续
int min=9999,max=0;
for (int i = 0; i < len; ++i) {
if (a[i]==0)
continue;
if (a[i]<min)
min = a[i];
if(a[i]>max)
max=a[i];
}
if ((max-min)<len-1)
return 1;
else
return 0;
}