题目详情

Find the contiguous subarray within an array (containing at least one number) which has the largest sum.
For example, given the array [-2,1,-3,4,-1,2,1,-5,4],
the contiguous subarray [4,-1,2,1] has the largest sum = 6.
输入:给定数组
输出:找出给定数组所包含的连续的子数组中,元素加和最大的那一组,返回最大和

解法一

思路:

  • 在遍历数组的每一个元素的时候,我们都要思考一个问题——是从这个元素重新开启一个子数组的加和更大,还是和前面的元素一起加和更大。
  • 如果单开元素加和更大(判断前面的子数组和是不是小于0)。我们就将保存当前和的nowValue赋值为当前元素。此元素就成为了子数组的第一个元素。
  • 或者将当前元素直接加入子数组。每次操作都要判断,当前value是否是最大值,更新max值。
        int max = Integer.MIN_VALUE;
        int nowValue = 0;

        for(int i=0;i<nums.length;i++){
            if(nowValue < 0){
                nowValue = nums[i];
                max = Math.max(max, nowValue);
            }else{
                nowValue = nowValue + nums[i];
                max = Math.max(max, nowValue);
            }
        }
        
        return max;

soleil阿璐
350 声望45 粉丝

stay real ~