题解 | 连续子数组的最大和(二)
连续子数组的最大和(二)
https://www.nowcoder.com/practice/11662ff51a714bbd8de809a89c481e21
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param array int整型一维数组 * @return int整型一维数组 */ public int[] FindGreatestSumOfSubArray (int[] array) { // write code here int[] dp=new int[array.length]; int left=0; int right=0; int sum=array[0]; dp[0]=array[0]; int max_sum=sum; int resr=0; int resl=0; for(int i=1;i<array.length;i++){ right++; dp[i]=Math.max(dp[i-1]+array[i],array[i]); if(dp[i-1]+array[i]<array[i]){ left=right; } if(dp[i]>max_sum||dp[i]==max_sum && (right-left+1)>(resr-resl+1)){ max_sum=dp[i]; resl=left; resr=right; } } return Arrays.copyOfRange(array,resl,resr+1); } }
妈的,妈的,救命啊,好久没做算法题了,这个动态规划的题目都做不出来。
这个题目是利用一个辅助数组记录遍历第i个位置的时候以i结尾的最大连续数字和。然后,初始化4个辅助变量来记录在这个过程中下标的变化情况。当需要更新最大值的时候就更新最大连续数字和的数组的左右下标,当碰到相同最大值的时候就判断是否需要更新长度。