问题
- 给定含有n个不同元素的数组L=<x1,x2,…,xn>,如果L中存在xi,使得x1<x2<…<xi-1xi+1>…>xn ,则称L是单峰序列,并称xi是L的峰顶。假设L是单峰的,设计一个算法找到L的峰顶,并从理论上分析算法的时间复杂度。
代码
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[100]={-1},n=0,i=0,flag=0,m=0;
scanf("%d",&n);//输入数组 长度
for(;i<n;i++)
{
scanf("%d",&a[i]);//输入数组元素值
}
for(i=0;i<n;i++)
{
if(a[i+1]>a[i])//循环判断下一个数组元素值大于a[i]时
{ //将a[i+1]赋给m
m=a[i+1];
}
else
break;//当a[i+1]<a[i]时,跳出循环
}
printf("%d",m);//输出峰值
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[100]={-1},n=0,i=0,m=0;
scanf("%d",&n);//输入数组 长度
for(;i<n;i++)
{
scanf("%d",&a[i]);//输入数组元素值
}
i=n/2;//将数组二分得到i
while(1)
{
if(a[i-1]>a[i]&&a[i]>a[i+1])//降序,峰顶在i及i左边
{
m=a[i-1];
i=i/2;
}
if(a[i-1]<a[i]&&a[i]>a[i+1])//找到峰顶
{
m=a[i];
break;
}
if(a[i-1]<a[i]&&a[i]<a[i+1])//升序,峰顶在i及i右边
{
m=a[i+1];
i=(n-i)/2+i;
}
}
printf("%d",m);//输出峰值
}