设计一个算法,当你从该数列中随意选取5个数值,判断这5个数值是否连续相邻。
2014-05-29 18:11
288 查看
一个整数数列,元素取值可能是0~65535中的任意一个数,相同数值不会重复出现。0是例外,可以反复出现。
请设计一个算法,当你从该数列中随意选取5个数值,判断这5个数值是否连续相邻。
注意:
- 5个数值允许是乱序的。比如: 8 7 5 0 6
- 0可以通配任意数值。比如:8 7 5 0 6 中的0可以通配成9或者4
- 0可以多次出现。
- 要求复杂度要小于O(n2)。
请设计一个算法,当你从该数列中随意选取5个数值,判断这5个数值是否连续相邻。
注意:
- 5个数值允许是乱序的。比如: 8 7 5 0 6
- 0可以通配任意数值。比如:8 7 5 0 6 中的0可以通配成9或者4
- 0可以多次出现。
- 要求复杂度要小于O(n2)。
#include<iostream.h> /* 利用连续数的特性,如果连续,找到最小的数,然后每个数分别差0,1,2,3,4,然后申请一个数组b[], 差1在b【1】中加1,差2在吧b【2】中加1,最后b的数组一定全为1,特殊是有0可以随意匹配, 只需要统计出1的个数剩下的数由0来补充,及1的个数和0的个数之和为5则就连续, 为了防止数组里面数字较大造成b数组溢出,因此申请较大的数组 */ void panduan(int a[],int len) { int b[65535]={0},min=99999,i,num=0; for(i=0;i<len;i++) //找到最小值 if(a[i]!=0&&a[i]<min) min=a[i]; for(i=0;i<len;i++) //统计出0的个数,以及设置b数组中的值 { if(a[i]==0) num++; else b[a[i]-min]++; } int n=0; for(i=0;i<len;i++) //统计b数组中1的个数 { if(b[i]==1) n++; } if((n+num)==len) cout<<"连续"<<endl; else cout<<"不连续"<<endl; } /* 取5个数中非0的最大数和最小数,之差不大于4则连续,否则不连续。 */ void panduan1(int a[],int len) { int max=0,min=99999,num=0; for(int i=0;i<len;i++) { if(a[i]>max) max=a[i]; if(a[i]!=0&&a[i]<min) min=a[i]; if(a[i]==0) num++; } if(num>=4||(max-min)<=4) cout<<"连续"<<endl; else cout<<"不连续"<<endl; } void main() { int a[5]={8,9,5,0,0},len=5; panduan1(a,len); }
相关文章推荐
- 12、一个整数数列,元素取值可能是0~65535中的任意一个数,相同数值不会重复出现。0是例外,可以反复出现。 请设计一个算法,当你从该数列中随意选取5个数值,判断这5个数值是否连续相邻。
- 当你从该数列中随意选取5个数值,判断这5个数值是否连续相邻
- 每日一道算法题:判断5个数值是否连续相邻
- 判断这5个数值是否连续相邻
- 判断这5个数值是否连续相邻
- 对于一个m*n的整数矩阵,其中每一行和每一列的元素都按升序排列,设计一个高效的算法判断一个数值是否存在,并给出位置
- 判断数列中任取的5个数是否连续相邻
- 如何判断一个数组中的数值是否连续相邻
- 判断这5个数值是否连续相邻
- java 判断一个数组中的数值是否连续相邻
- java 判断一个数组中的数值是否连续相邻的方法
- 如何判断一个数组中的数值是否连续相邻
- 判断这5个数值是否连续相邻
- 数组之判断一个数组中的数值是否连续相邻
- 判断一个数组中的数值是否连续相邻
- 假设表达式中允许包括3中括号:(,[,{,设计一个算法采用顺序栈判断表达式中的括号是否正确配对
- 假设表达式中包含三种括号 圆括号方括号大括号 设计一个算法用顺序栈判断表达式中的括号是否正确配对
- 设计一个算法,判断字符串S是否对称
- 程序员面试题目总结--数组(二)【二分查找、找出给定数字出现次数、两个有序整型数组交集、找出数组中唯一的重复元素、判断数组中的数值是否连续相邻】
- 设计一个算法,判断玩家是否赢了井字游戏