一个整数数列,元素取值可能是0~65535中的任意一个数,相同数值不会重复出现。0是例外,可以反复出现。
请设计一个算法,当你从该数列中随意选取5个数值,判断这5个数值是否连续相邻。 注意: - 5个数值允许是乱序的。比如: 8 7 5 0 6 - 0可以通配任意数值。比如:87 5 0 6 中的0可以通配成9或者4 - 0可以多次出现。 - 复杂度如果是O(n2)则不得分。 思路:因为数列是无序的,而且因为0的存在而富有变化,那么连续相邻这个条件中有哪些是可以保持不变的呢?我们假设这五个连续数列从小到大依次为A[0]-A[1]-A[2]-A[3]-A[4] .那么这无序的5个数字只要能填入到这个区间内,则都为有序的,否则为无序的.则这5个数字组成的区间长度至多为4,因此,我们只需要判断区间长度max-min <=4?是否成立即可. 代码:
bool isContinueSeries(int* A,int n) { int max=0; int min=65535; for(int i=0;i<n;++i) { if(A[i] > max) max=A[i]; if(A[i] < min) min=A[i]; } if((max - min) <=4) return true; else return false; }