欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

如何在未排序的整数数组中找到最大值与最小值

程序员文章站 2024-03-15 20:20:30
...

取双元素法:
把数组中相邻的两个元素分为一组,然后比较这两个元素,较大者和max比较,如果大于max则更新max

较小者和min比较,小于min则更新min。

算法的时间复杂度为O(1.5*n)。

注意:数组长度为奇数还是偶数,这是需要考虑的。

#include <iostream>
#include <vector>

using namespace std;

class Solution
{
public:
    bool GetMaxAndMin(int *arr, int len, int& Max, int& Min)
    {
        // 参数检验
        if(arr == nullptr || len <= 0)
        {
            return false;
        }

        if(len <= 1)
        {
            Max = Min = arr[len-1];
            return true;
        }

        //Max和Min初始化
        Max = arr[0] > arr[1] ? arr[0] : arr[1];
        Min = arr[0] > arr[1] ? arr[1] : arr[0];

        int i;
        int n;

        //判断数组长度为奇数还是偶数
        if(len % 2)
            n = len - 1;
        else
            n = len;

        for(i=2; i<n; i+=2)
        {
            if(arr[i] > arr[i+1])
            {
                Max = Max > arr[i] ? Max : arr[i];
                Min = Min > arr[i + 1] ? arr[i + 1] : Min;
            }
            else
            {
                Max = Max > arr[i + 1] ? Max : arr[i + 1];
                Min = Min > arr[i] ? arr[i] : Min;
            }

        }

        /*如果length为奇数,则剩下最后一个元素没有做过比较*/
        if(i < len)
        {
            Max = Max > arr[i] ? Max : arr[i];
            Min = Min > arr[i] ? arr[i] : Min;
        }

        return true;
    }
};


int main()
{
    int a[] = {8,11,5,2,1,15};

    Solution b;

    int Max = 0;
    int Min = 0;

    if(b.GetMaxAndMin(a, 6, Max, Min))
    {
       cout << "Max : " << Max <<  endl;
       cout << "Min : " << Min <<  endl;
    }

    return 0;
}