LeetCode53. 最大子序和

LeetCode53. 最大子序和

题目描述

/**
     * 
     * 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),
     * 返回其最大和。
     * 
     */

思路分析

  1. 求最大子序和,可以考虑使用递归的思路,从第一个元素开始,记录当前项的前一项子串的最大子序和
  2. 用前一项的最大子序和 + 当前项 与 当前项元素比较大小,大者则为当前项的最大子序和
  3. 再用一个变量记录所有子序和的最大值,每次比较更新
  4. 则在遍历数组结束时就已经记录了该数组的最大子序和
  5. 详解见下源码

源码及分析

/**
     * 
     * @param nums 求子序和是数组
     * @return     返回最大子序和
     */
    public int maxSubArray(int[] nums) {
        //定义preMax保存当前位置前一项的连续子串的最大值和
        int preMax = 0;
        //定义max保存连续子串的最大和,默认为数组第一个元素的大小
        int max = nums[0];
        for (int num : nums) {
            //如果前 n - 1 连续子串的和加上第 n 项的和小于第n项,则前n 项子串的最大值为 第n项的num
            preMax = Math.max(preMax + num, num);
            //max总是记录当前最大子串和
            max = Math.max(max, preMax);
        }
        return max;
    }
posted @ 2021-05-30 11:15  mx_info  阅读(55)  评论(0)    收藏  举报