子数组的最大和(较难)

最大和的子数组

http://www.nowcoder.com/questionTerminal/32139c198be041feb3bb2ea8bc4dbb01

import java.util.*;
public class Solution {
    /**
     *
     * @param A int整型一维数组 
     * @return int整型
     */
    public int maxSubArray (int[] A) {
        if(A == null || A.length == 0)
            return 0;
        int res = A[0];
        int max = A[0];
        for(int i = 1;i < A.length;i ++){
            max = Math.max(max + A[i],A[i]);
            res = Math.max(max,res);
        }
        return res;
    }
}

刚开始是没有头绪的,因为题目都看不懂,后来搜了一下才知道子数组的意思,然后,还是没有头绪。在借鉴之后,发现可以使用Math.max这个函数。首先,max是从第一个元素到第i个元素的和与第i个元素的大小比较,很巧妙,如果第i个元素大于1到i个数的和,那么max就等于第i个元素的值,也就是说子数组的起点就由第i个元素开始了,反之则继续循环。res是记录最大的和,一直都是res与max相比较,max一直在变化,而res永远是一直最大的那一个,比较巧妙,需要慢慢消化。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务