微软一道面试题

来源:互联网 发布:fp6601q数据手册 编辑:程序博客网 时间:2024/05/16 14:09
一个整数数列,元素取值可能是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;}



原创粉丝点击