采用分而治之(二分法)的思想去求解
分而治之:分而治之的思想可以用于解决很多问题,大概的思路就是把一个比较大的复杂的问题切分成小的块,然后分头去解决他们,最后再把结果合并起来,就是“分而治之”。
/*** 分治法求数组中的最大值* @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);