采用分而治之(二分法)的思想去求解
分而治之:分而治之的思想可以用于解决很多问题,大概的思路就是把一个比较大的复杂的问题切分成小的块,然后分头去解决他们,最后再把结果合并起来,就是“分而治之”。
/**
* 分治法求数组中的最大值
* @param arr 数组
* @param start 数组下标开始
* @param end 数组下标结束
* @return
*/
public static int max(int[] arr, int start, int end) {
if (start == end) {
return arr[start];
}
int mid = (start + end) / 2;
//递归算左边最大值
int leftMax = max(arr, start, mid);
//递归算右边最大值
int rightMax = max(arr, mid + 1, end);
//左右两边的最大值比较
return Math.max(leftMax, rightMax);
}
测试
int[] arr = {1, 2, 3, 4, -5, 6, 7, 8, 9, -10,-11, -12};
int max = max(arr, 0, arr.length - 1);
System.out.println(max);