zoukankan      html  css  js  c++  java
  • 图解算法——最大子序和

    1、题目描述

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

    题目来源:
    https://leetcode-cn.com/problems/maximum-subarray/

    2、示例

    示例1:

    输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
    输出:6
    解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。

    示例2:

    输入:nums = [1]
    输出:1

    提示:

    • 1 <= nums.length <= 3 * 104
    • -105 <= nums[i] <= 105

    3、解题思路

    以  [-2,1,-3,4,-1,2,1,-5,4]  为例:

    当我们以下标为 i 时,如果我们定义包含下标 i 处的节点 arr[i] 的最大连续子数组和为 f(i) , 那么,包含下一位 i+1 处的节点 arr[i+1] 的最大连续子数组和为 f(i+1) = max( f(i) + arr[i+1], arr[i+1] );

    代码如下:

    class Solution {
        public int maxSubArray(int[] nums) {
            int max = nums[0];
            int pre = 0;
            for(int i = 0; i<nums.length; i++){
                pre = Math.max(pre+nums[i], nums[i]);
                max = Math.max(max, pre);
            }
            return max;
        }
    }

    复杂度分析:

    • 时间复杂度:O(n),其中 n 为 nums 数组的长度。我们只需要遍历一遍数组即可求得答案。
    • 空间复杂度:O(1),我们只需要常数空间存放若干变量。

    提交记录:

    4、进阶:

    如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的 分治法 求解。

    下篇再续...

    Over...........

  • 相关阅读:
    css优化篇
    select超全超详细总结篇
    meta总结
    富文本编辑
    textarea 换行处理
    07 DRF响应类:Response
    06 内部类
    05 序列化组件
    04 APIView的请求生命周期
    python中if __name__ == '__main__'是什么?
  • 原文地址:https://www.cnblogs.com/gjmhome/p/15110730.html
Copyright © 2011-2022 走看看