1000M雙線網(wǎng)站空間中國搜索引擎大全
Alice 管理著一家公司,并租用大樓的部分樓層作為辦公空間。Alice 決定將一些樓層作為?特殊樓層?,僅用于放松。
給你兩個整數(shù)?bottom
?和?top
?,表示 Alice 租用了從?bottom
?到?top
(含?bottom
?和?top
?在內(nèi))的所有樓層。另給你一個整數(shù)數(shù)組?special
?,其中?special[i]
?表示? Alice 指定用于放松的特殊樓層。
返回不含特殊樓層的?最大?連續(xù)樓層數(shù)。
示例 1:
輸入:bottom = 2, top = 9, special = [4,6] 輸出:3 解釋:下面列出的是不含特殊樓層的連續(xù)樓層范圍: - (2, 3) ,樓層數(shù)為 2 。 - (5, 5) ,樓層數(shù)為 1 。 - (7, 9) ,樓層數(shù)為 3 。 因此,返回最大連續(xù)樓層數(shù) 3 。
示例 2:
輸入:bottom = 6, top = 8, special = [7,6,8] 輸出:0 解釋:每層樓都被規(guī)劃為特殊樓層,所以返回 0 。
提示
1 <= special.length <= 10^5
1 <= bottom <= special[i] <= top <= 10^9
special
?中的所有值?互不相同
分析:可以在排序前將 bottom?1 和 top+1 也放入給定的數(shù)組 special 按照升序排序。這樣一來任意相鄰兩個元素之間的樓層就都不是特殊樓層。如果相鄰的兩個元素分別為?x,y,那么非特殊樓層的數(shù)量即為?y?x?1。記錄最大值即可。
int cmp(const void *a,const void *b)
{int *aa=(int*)a;int *bb=(int*)b;return *aa-*bb;
}int maxConsecutive(int bottom, int top, int* special, int specialSize) {int temp[specialSize+2];temp[specialSize]=bottom-1,temp[specialSize+1]=top+1;int fb=0,ft=0;for(int i=0;i<specialSize;++i){temp[i]=special[i];if(special[i]==bottom)fb=1;if(special[i]==top)ft=1;}qsort(temp,specialSize+2,sizeof(int),cmp);int ans=-1,l=specialSize+2;for(int i=1;i<l;++i){int cnt=temp[i]-temp[i-1]-1;ans=fmax(ans,cnt);}return ans;
}