/************************************************************************/
/* 12、一个整数数列,元素取值可能是0~65535中的任意一个数,相同数值不会重复出现。0是例外,可以反复出现。
请设计一个算法,当你从该数列中随意选取5个数值,判断这5个数值是否连续相邻。
注意:
- 5个数值允许是乱序的。比如: 8 7 5 0 6
- 0可以通配任意数值。比如:8 7 5 0 6 中的0可以通配成9或者4
- 0可以多次出现。
- 复杂度如果是O(n2)则不得分。
*/
//从整数数列中随机选择5个数,排序,遍历得到非0的最小值和最大值,两者只差小于5即连续相邻
//判读[l, h]是否连续
bool isSeq(int * iArr, int l, int h)
{
if(!iArr || l > h)
return true;
int minVal = iArr[l];
int maxVal = iArr[l];
for(int i = l + 1; i <= h; i++)
{
if(iArr[i] == 0)
continue;
if(minVal > iArr[i])
minVal = iArr[i];
if(maxVal < iArr[i])
maxVal = iArr[i];
}
return (maxVal - minVal) == (h - l);
}
12、一个整数数列,元素取值可能是0~65535中的任意一个数,相同数值不会重复出现。0是例外,可以反复出现。 请设计一个算法,当你从该数列中随意选取5个数值,判断这5个数值是否连续相邻。
最新推荐文章于 2023-10-05 20:54:24 发布