问题描述
用递归的方式实现获取数组中最大值的操作。
关键词:二分查找;递归
代码实现
/**
* 二分查找的应用:二分查找法不一定只能用在有序数组上,
* 只要是可以通过某个标准将数组分为左右两部分,
* 并在左右两部分中继续按照此标准划分的题都可以考虑二分查找法
* @author zyt
*
*/
public class GetMax {
public static int getMax(int[] arr){
return process(arr, 0, arr.length-1);
}
/**
* 用递归的方式来实现 获取arr[L..R]范围上的最大值
* @param arr
* @param L
* @param R
* @return
*/
public static int process(int[] arr, int L, int R) {
if(L == R){//arr[L..R]范围上只有一个数,则直接返回
return arr[L];
}
int mid = L + ((R - L) >> 1); //中点
int leftMax = process(arr, L, mid);
int rightMax = process(arr, mid+1, R);
return Math.max(leftMax, rightMax);
}
public static void main(String[] args) {
int[] arr = {3,3,2,6,9,4,7,1,8,10,5};
System.out.println(getMax(arr));
}
}
二分查找的应用:
二分查找法不一定只能用在有序数组上,只要是可以通过某个标准将数组分为左右两部分,并在左右两部分中继续按照此标准划分的题都可以考虑二分查找法