因为结果要得到两个值,所以在代码设计上需要动点脑子,在函数的形参上加上两个引用型变量maxValue和minValue就可以了。
分治法的总思想是:将数组分成两半,分别求lmax,lmin和rmax,rmin,最后得到的maxValue = max(lmax, rmax), minValue = min(lmin, rmin)。
代码贴上:
//
// main.cpp
// EditDistance
//
// Created by szk on 14-5-5.
// Copyright (c) 2014年 szk. All rights reserved.
//
#include <iostream>
using namespace std;
//int maxValue;
//int minValue;
void getMaxAndMinValue(int a[], int low, int high, int &maxValue, int &minValue)
{
if(low == high)
{
maxValue = a[low];
minValue = a[high];
return;
}
if(low + 1 == high)
{
if (a[low] > a[high]) {
maxValue = a[low];
minValue = a[high];
}
else
{
maxValue = a[high];
minValue = a[low];
}
return;
}
int lmax;
int lmin;
int rmax;
int rmin;
int mid = (low + high) / 2;
getMaxAndMinValue(a, low, mid - 1, lmax, lmin);
getMaxAndMinValue(a, mid, high, rmax, rmin);
if(lmax > rmax){
maxValue = lmax;
}
else{
maxValue = rmax;
}
if (lmin > rmin) {
minValue = rmin;
}
else{
minValue = lmin;
}
}
int main(int argc, const char * argv[])
{
// insert code here...
int maxValue, minValue;
int a[] = {12, 324, 23, -12, 8, 9, 1213, 56, 28};
getMaxAndMinValue(a, 0, 8, maxValue, minValue);
cout << maxValue << " " << minValue << endl;
return 0;
}