利用二分法分别查找数组两边的最大值,两边的最大值也是通过递归查找的。时间复杂度计算可以使用master公式,该公式适用于等分递归。
T(N)= a* T(N/b)+ O(N^d)
当log(b,a) > d,T(N) = O(N^log(b,a));
当log(b,a) = d,T(N) = O(N^ * logN);
当log(b,a) < d,T(N) = O(N^d);
代码如下:
#include<iostream>
using namespace std;
int process(int[], int, int);
int main() {
int arr[] = { 1, 9, 3, 4, 5, 6, 7 };
int res = process(arr, 0, 6);
cout << "res=" << res << endl;
system("pause");
return 0;
}
int process(int arr[],int l, int r) {
if (l == r) {
return arr[l];
}
else {
int mid = l + ((r - l) >> 1);
int lmax = process(arr, l, mid);
int rmax = process(arr, mid + 1, r);
return lmax > rmax ? lmax : rmax;
}
}