给定一个整数数组,因为数组中不同的且连续的子序列有不同的和,返回数组中子序列最大的和值

举例:

输入: [-2,1,-3,4,-1,2,1,-5,4],

输出: 6

解题思路:

  • sum 为子序列之和,sum >0 则说明结果有增,则sum 保留当前遍历数字

  • 如果sum <=0,则说明sum对结果无增益效果,需要舍弃,则sum直接更新为当前遍历数字

  • 每次比较sum和ans的大小,将最大值置为ans,遍历结束返回结果

  • 时间复杂度为O(n)

class Solution 
{
  public int maxSubArray(int[] nums)
  {
    if (nums == null || nums.length == 0)
    {
      return 0;
    }
    int sum = 0;
    int ans = nums[0];
    for(int i = 0; i < nums.length; i++)
    {
      if (sum > 0)
      {
        sum += nums[i];
      }
      else
      {
        sum = nums[i];
      }
      ans = Math.max(ans, sum);
    }
    return ans;
  }
}

数据结构与算法      数据结构与算法

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!

反转字符串 上一篇
赤湾一览 下一篇