利用分组的方法求序列的最大值和最小值
#include<bits/stdc++.h>
using namespace std;
const int N=10010;
int n,a[N],maxx[N],minn[N];
int main()
{
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
int j=0;
for(int i=0;i<n;i+=2)
{
if(a[i]>a[i+1])
{
maxx[j]=a[i];
minn[j]=a[i+1];
}
else
{
maxx[j]=a[i+1];
minn[j]=a[i];
}
j++;
}
if(n%2)
{
maxx[j++]=a[n-1];
minn[j++]=a[n-1];
}
int imax=maxx[0],imin=minn[0];
for(int i=1;i<j;i++)
{
if(maxx[i]>imax)
{
imax=maxx[i];
}
if(minn[i]<imin)
{
imin=minn[i];
}
}
cout<<imax<<endl;
cout<<imin<<endl;
return 0;
}
利用分治算法求数组的最大值和最小值
#include<bits/stdc++.h>
using namespace std;
const int N = 10010;
int a[N],n;
void maxmin(int a[],int l,int r,int &maxi,int &mini)
{
if(l==r)
{
maxi=mini=a[l];
}
else
{
int mid=(r+l)/2;
int lmaxi,rmaxi,lmini,rmini;
maxmin(a,l,mid,lmaxi,lmini);
maxmin(a,mid+1,r,rmaxi,rmini);
maxi=max(lmaxi,rmaxi);
mini=min(lmini,rmini);
}
}
int main()
{
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
int maxi,mini;
maxmin(a,0,n-1,maxi,mini);
cout<<maxi<<" "<<mini<<endl;
return 0;
}