算法8:一个整数数组里怎么同时找最大和最小的数,尽量优化比较次数

26 篇文章 0 订阅

解题思路

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值