leetcode刷题-55最大子序和

193 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

leetcode55题,最大子序和

前文

本文为菜鸟的刷题记录,仅用作笔记使用,并非最佳解决方案。

题目信息

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。https://leetcode-cn.com/problems/maximum-subarray/

解题思路分析

解法1

本题主要是从一个数组中遍历获取其中部分连续元素的最大和。本解法的主要思路是首先存储一个变量作为加和的记录。当加和临时变量小于0时,会对遍历的下一个变量产生反向影响,加和反而更小,这种情况下重新进行加和计算,并与之前的加和进行比较。而当加和的临时变量大于0时,则是对下一个遍历的变量产生正向加成,因此直接将当前加和与下一个变量值进行相加。每个变量相加后都进行与已存储变量的比较,从二者中选取更大的变量值重新存储。当遍历结束时,则得到所需求的最大子序和。代码如下:

    public int maxSubArray(int[] nums) {
        int res = 0;
        int max = 0;
        if(nums.length > 0){
            max = nums[0];
            res = max;
        }
        for (int i = 1; i < nums.length; i++) {
            if(max > 0){
                max += nums[i];
            }else{
                max = nums[i];
            }
            res = Math.max(res,max);
        }
        return res;
    }

复杂度分析

  • 时间复杂度 o(N) N为数组长度,只需要遍历一次数组即得到答案
  • 空间复杂度 o(1) 仅存储了常量变量

后记

  • 千古兴亡多少事?悠悠。不尽长江滚滚流。