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...........

  • 相关阅读:
    MySQL之数据表的插入内容 空与非空(六)
    输出杨辉三角形
    输入三个double型的数据,放入到a,b,c三个变量中去,使用条件结构与交换逻辑将这三个变量中的值从小到大排列。
    软件测试
    过程设计工具
    设计原理
    总体设计
    生活,也让别人生活
    计算器案例
    需求分析
  • 原文地址:https://www.cnblogs.com/gjmhome/p/15110730.html
Copyright © 2011-2022 走看看