# 1. 求數組中最大值
在前面兩道題中,我們知道都使用了分治的思想。且找到了子問題,也就是左邊和右邊的比較,或者是兩個子數組的排序。那么類似的,在使用遞歸的求數組中的最大值的時候,我們也需要首先找到子問題。由于是找最值問題,故而我們最終的子問題為比較問題。那么如果我們可以將數組拆分為兩半,然后找到各自的最大值,最終返回這兩個值中最大的那個即為最終答案。
也就是此時的問題變為:
~~~
/**
* 遞歸的查找數組中的最大值
* @param arr 待查找數組
* @return 最大值
*/
public int getMaximumByRecursion(int[] arr){
if(arr == null || arr.length == 0) return -1;
return getMaximumValue(arr, 0, arr.length - 1);
}
private int getMaximumValue(int[] arr, int left, int right) {
if(left == right) return arr[left];
int mid = left + ((right - left) >> 1);
int leftMaxValue = getMaximumValue(arr, left, mid);
int rightMaxValue = getMaximumValue(arr, mid + 1, right);
return Math.max(leftMaxValue, rightMaxValue);
}
~~~