如何在未排序的整数数组中找到最大值与最小值
程序员文章站
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;
}
上一篇: 题:编写 在有序数组中,查找某个数