1、前言
学习算法已经有半年多了,今天突然看到一道要求用算法中非常经典的分治法解决一个非常基础的数组中求最值的问题,自己就随手写了下,相当于高中时写随笔吧,给大家看一下,如果大家对分治法有着更深刻的理解或则指导意见,欢迎大家在帖子下方留言。
2、求最值代码分析
public static int findMax(int[] arr) {
int max=Max(arr,0,arr.length-1);
return max;
}
public static int Max(int[] arr,int index1,int index2) {
if(index1==index2) {
return arr[index1];
}
else {
int len=(index1+index2)/2;
int leftMax=Max(arr,index1,len);
int rightMax=Max(arr,len+1,index2);
return leftMax>rightMax?leftMax:rightMax;
}
}
3、完整程序展示
FindMax.java
package com.jz.max;
public class FindMax {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr=new int[] {49,38,65,97,76,13,127,49,55,4};
int max=findMax(arr);
System.out.println(max);
}
public static int findMax(int[] arr) {
int max=Max(arr,0,arr.length-1);
return max;
}
public static int Max(int[] arr,int index1,int index2) {
if(index1==index2) {
return arr[index1];
}
else {
int len=(index1+index2)/2;
int leftMax=Max(arr,index1,len);
int rightMax=Max(arr,len+1,index2);
return leftMax>rightMax?leftMax:rightMax;
}
}
}