正常的实现方法
public class Test{
private static int[] arr;
public static int subArray(){
if(null == arr){
return 0;
}
int index = 1;
int c = 0;
int[] num1 = null;
List<Integer> list = new ArrayList<Integer>();
for(int i = index; i < arr.length; i++){
if(arr[i-1] <= arr[i]){
index++;
}else{
num1 = Arrays.copyOfRange(arr, c, index);
int max = maxInterval(num1);
list.add(max);
System.out.println(Arrays.toString(num1));
c = index;
index++;
}
}
if(index == arr.length){
num1 = Arrays.copyOfRange(arr, c, index);
int max = maxInterval(num1);
list.add(max);
System.out.println(Arrays.toString(num1));
}
Object[] obj = list.toArray();
Arrays.sort(obj);
return (int) obj[obj.length-1];
}
public static int maxInterval(int[] arr){
int maxValue = 0;
if(null != arr){
maxValue = arr[arr.length - 1] - arr[0];
}
return maxValue;
}
public static void main(String[] args){
int maxSum = subArray(arrays);
System.out.println("最大子数组的差异为:" + maxSum);
}
}
递归的实现方法
public class Test{
private static int[] arr;
public static int maxInterval(){
if(arr.length == 1){
return arr[0];
}
if(arr.length == 2){
if(arr[0] > arr[1]){
return -1;
}else{
return arr[1]-arr[0];
}
}
return findMaxValue(arr, 0);
}
public static int findMaxValue(int[] arr, int maxValue) {
int startIndex = 0;
for (int i = 1; i < arr.length; i++) {
if (arr[i] < arr[i - 1]) {
int[] ints = Arrays.copyOfRange(arr, i, arr.length);
int maxVal = arr[i - 1] - arr[0];
maxValue = maxVal < maxValue ? maxValue : maxVal;
return findMaxValue(ints, maxValue);
}
if (i == arr.length - 1) {
int[] ints = Arrays.copyOfRange(arr, startIndex, arr.length);
int maxVal = ints[ints.length - 1] - ints[0];
maxValue = maxVal < maxValue ? maxValue : maxVal;
}
}
return maxValue;
}
public static void main(String[] args){
System.out.println("最大子数组的差异为:" + maxInterval());
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)