单求最大或最小值需要遍历整个序列,复杂度O(n)。
当同时求最大和最小值时,可以将序列的每一对相邻元素先做比较,然后与当前的最大值最小值进行比较,来决定是否更新。这样每两个元素之间需要3次比较。
代码如下:
// maxmin.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <random>
#include <ctime>
using namespace std;
vector<int> v;
void solve1()
{
int a = clock();
int min = v[0];
int max = v[0];
for (int i = 0; i < v.size(); i++)
{
if (v[i] < min)
min = v[i];
if (v[i] > max)
max = v[i];
}
int b = clock();
cout << "min=" << min << " max=" << max << " running time:" << b - a << endl;
}
void solve2()
{
int a = clock();
int min = v[0];
int max = v[0];
for (int i = 0; i < v.size() - 1; i+=2)
{
if (v[i] > v[i + 1])
{
if (v[i] >