您的位置:首页 > 其它

当你从该数列中随意选取5个数值,判断这5个数值是否连续相邻

2014-06-16 00:39 381 查看
一个整数数列,元素取值可能是0~65535中的任意一个数,相同数值不会重复出现。0是例外,可以反复出现。

请设计一个算法,当你从该数列中随意选取5个数值,判断这5个数值是否连续相邻。

注意:

- 5个数值允许是乱序的。比如: 8 7 5 0 6

- 0可以通配任意数值。比如:8 7 5 0 6 中的0可以通配成9或者4

- 0可以多次出现。

- 复杂度如果是O(n2)则不得分。

这题,其实只要找到这五个数中的最大值和最小值以及记录零的个数就可以了。

最后也就下面这几种情况而已,当然,给的数组时乱序的,但没关系,只要增加两个变量来记录最大值和最小值就OK了,

时间复杂度O(n).

0的个数 序列方式

0 12345

1 12340,12305

2 12300,12040,12005

3 12000,10300,10040,10005

4 10000,00005

5 00000

PS:菜鸟学习中,如有错误还望各位道友批命指正,万分拜谢。

#include<stdio.h>

bool ifisBorderUpon( int arr[] )
{
int max_num=0;
int min_num=65535;
int zero_count=0;

for(int i=0; i<5 ; i++ )
{
if(arr[i]==0)
{
zero_count++;
}
else
{
if(arr[i]>max_num)
max_num=arr[i];
if(arr[i]<min_num)
min_num=arr[i];
}

}
//count==4||5 肯定会连续的
if(zero_count==4||zero_count==5)
{
return true;
}
//当count==0时,五个数只能连续
else if(zero_count==0)
{
if((max_num-min_num)==4)
return true;
return false;
}
//else if(zero_count==1 || zero_count==2 ||zero_count==3)
//如果放上这个条件,编译器会有警告有路径没有返回值,但其实count=012345,肯定会符合这边的判断条件的
else
{
if((max_num-min_num)<=4)
{
return true;
}
return false;
}
}

int main()
{
int arr[5]={8,6,7,5,4};

if(ifisBorderUpon(arr)==true)
printf("yes\n");
else
{
printf("no\n");
}
getchar();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐