动态规划:返回数组最大子序和(java)

给定一个整数数组,返回数组中连续的最大子序和。
声明一个同样大小的辅助数组temp,保存当前位置最大的子序和。
然后对这个temp数组求最大值。
求数组的最大值可以用 分治法 或者 调用Arrays的API
在这里插入图片描述

import java.util.Arrays;

public class maxSubstring {
	
	public static int getArrMaxDivide(Integer arr[], int strat, int end) {
		if (strat == end) {
			return arr[strat];
		}else {
			int leftMax = getArrMaxDivide(arr, strat, (end+strat) / 2);
			int rightMax = getArrMaxDivide(arr, (end+strat) / 2 + 1, end);
			return leftMax > rightMax ? leftMax : rightMax;
		}
	}
	
	public static int maxSubstring(Integer arr[]) {
		Integer temp;
		Integer[] sum = new Integer[arr.length];
		sum[0] = arr[0]; 
		for (temp = 1; temp < arr.length; temp++) {
			if (sum[temp-1] + arr[temp] < arr[temp]) {
				sum[temp] = arr[temp];
			}else {
				sum[temp] = sum[temp-1] + arr[temp];
			}
		}
		
		return getArrMaxDivide(sum, 0, sum.length-1);  // 分治法返回数组最大值
		
//		Arrays.sort(sum);  //调用API先排序,返回数组最大值
//		return sum[sum.length-1];
		
		
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Integer[] arr = new Integer[9];
		arr[0] = -2;
		arr[1] = 1;
		arr[2] = -3;
		arr[3] = 4;
		arr[4] = -1;
		arr[5] = 2;
		arr[6] = 1;
		arr[7] = -5;
		arr[8] = 4;
		System.out.println(maxSubstring(arr));		

	}

}

发布了31 篇原创文章 · 获赞 3 · 访问量 878

猜你喜欢

转载自blog.csdn.net/qq_38888209/article/details/104496494