题解 | #连续子数组的最大和(二)#

连续子数组的最大和(二)

http://www.nowcoder.com/practice/11662ff51a714bbd8de809a89c481e21

非常简单的DP问题,现在的更改在于需要返回的时取得最大子数组和的数组并且要求不仅时局部和是最大的而且要求长度也是最长的,所以只需要将长度的更新加入到最值的更新部分就可以的。再加上返回的是数组,所以只需要引入子数组的开始下标和终止下标就可得到长度和取得最大值的数组;
import java.util.*;
public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param array int整型一维数组 
     * @return int整型一维数组
     */
    public int[] FindGreatestSumOfSubArray (int[] array) {
        if(array.length==1)
            return new int[]{array[0]};
        int len = 0;
        int max_sum = Integer.MIN_VALUE;
        int sum = array[0];
        int start_inde = 0, start=0;
        int end_index = 0,enx = 0;
        for(int i=1;i<array.length;i++){
            if(sum>=0){
                sum += array[i];
                end_index = i;
            }else {
                sum = array[i];
                start_inde = i;
                end_index = i;
            }
            if(max_sum<=sum){
                    enx = end_index;
                    start = start_inde;

                max_sum = sum;
            }
        }
        int[] list_array = new int[enx-start+1];
        for(int i=start ,j=0;i<=enx;i++,j++){
            list_array[j] = array[i];
        }
        return list_array;
        
    }
}


全部评论

相关推荐

头像
10-15 22:27
已编辑
门头沟学院 C++
罗格镇的小镇做题家:我投了hr打电话来说学历太低了不符合要求,建议投荣耀,结果荣耀也投了一定水花没有,非本211硕
投递华为等公司10个岗位
点赞 评论 收藏
分享
头像
11-21 11:39
四川大学 Java
是红鸢啊:忘了还没结束,还有字节的5k 违约金
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务