最大值和最小值
遍历一遍直接找到最大值或者最小值是比较简单的算法:
int find_maxnumber(int* a)
{
int maxa = 0;
for (int i = 1; i <= n; i++)
{
if (a[i] > maxa)
{
maxa = a[i];
}
}
return maxa;
}
我们要解决的问题是如何同时找到一组数据中的最大值和最小值。如果直接遍历两边会进行2n次比较,但事实上可以用3/2n次比较就可以求出最大值和最小值。
不同于一次遍历一个跟最大值与最小值对比,我们每次比较的时候选择两个数据,先将两个数据对比,再将大的跟最大值比,小的跟最小值比
双最值源代码
#include<iostream>
using namespace std;
int main()
{
constexpr int maxn = 200;
constexpr int INF = 0x3f3f3f3f;
int a[maxn];
int n, maxa = 0, mina = INF;
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> a[i];
}
for (int i = 1; i <= n - 1; i = i + 2)
{
if (i > n) break;
int a1 = a[i], a2 = a[i + 1];