解题思路
n个大小的整数数组
思路1:遍历整个数组分别得出最大值和最小值,比较次数为2n
思路2:取两个数进行比较,大的与当前最大值比较,小的与当前最小值比较,则没两个数要比较3次,比较次数为1.5n
c++代码
//取两个数进行比较,小的数跟当前最小值比较,大的数跟当前最大值比较
void GetMinMax(int* buffer,int& bufferLen,int& max, int& min)
{
if(buffer == NULL || bufferLen <= 0)
{
cout<<"buffer is empty or wrong"<<endl;
return;
}
int i = 0;
int j = bufferLen -1;
min = buffer[0];
max = buffer[0];
while(i <= j)
{
if(buffer[i] < buffer[j])
{
if(buffer[i] < min)
{
min = buffer[i];
}
if(buffer[j] > max)
{
max = buffer[j];
}
}
else
{
if(buffer[j] < min)
{
min = buffer[j];
}
if(buffer[i] > max)
{
max = buffer[i];
}
}
i++;
j--;
}
}
测试代码
int _tmain(int argc, _TCHAR* argv[])
{
int buffer[10] = {9,6,1,7,10,2,4,5,8,-1};
int bufferLength = 10;
int min = 0;
int max = 0;
GetMinMax(buffer,bufferLength,max,min);
cout<<"min = "<<min<<" max = "<<max<<endl;
return 0;
}