编写一个程序,求一个整数数组中最大元素和次大的元素。
// 定义无穷大值
#define INF 32768
void solve (int a[], int low, int high, int &max1, int &max2)
{
if (high == low) {
max1 = a[low];
max2 = -INF;
} else if (high - low == 1) {
max1 = max(a[low], a[high]);
max2 = min(a[low], a[high]);
} else {
int lmax1, lmax2, rmax1, rmax2;
int mid = (low + high) / 2;
solve(a, low, mid, lmax1, lmax2);
solve(a, mid + 1, high, rmax1, rmax2);
max1 = max(lmax1, rmax1);
if (max1 == lmax1)
max2 = max(lmax2, rmax1);
else
max2 = max(lmax1, rmax2);
}
} 对应递推式:T(n) = 2T(n/2) + C --->>> 时间复杂度为O(n) #include<stdio.h>
void fun(int *p,int *max1,int *max2){
int *q = p;
*max1 = *max2 = *p;
while(*p){
if(*p>*max1) *max1 = *p;
p++;
}
while(*q){
if(*q>*max2 and *q!=*max1) *max2 = *q;
q++;
}
}
int main(){
int s[]={21,3,1,14,6,2};
int max1,max2;
fun(s,&max1,&max2);
printf("%d+%d=%d",max1,max2,max1+max2);
}
#include <stdio.h> void fun(int a[ ],int n,int &maxp1,int &maxp2) { int i; if (a[0]<a[1]) { maxp1=a[1]; maxp2=a[0]; } else { maxp1=a[0]; maxp2=a[1]; } for (i=2;i<n;i++ ) if (a[i]>maxp1) { maxp2=maxp1; maxp1=a[i]; } } void main() { int a[ ]={0,2,5,6,8,1,3,4,7,9},max1,max2; int n=10; fun(a,n,max1,max2); printf("MAX1:%d,MAX2:%d\n",max1,max2); }