题目详情

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

示例:

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

输出: 6

解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。

链接:https://leetcode-cn.com/problems/maximum-subarray

题解

动态规划:f(i)=max(f(i-1)+num[i],num[i]))

class Solution {
public:
int maxSubArray(vector<int>& nums) {
//dp
//f(i)表示下标为i的最大子序和
//更新方程:f(i)=max(f(i-1)+num[i],num[i])) 要么加上下一个要么重新从i开始计和
if(nums.empty())
return 0;
int numSize=nums.size();
int maxx=nums[0];
int maxx_global=nums[0];
for(int i=1;i<numSize;i++){
maxx=max(maxx+nums[i],nums[i]);
//这里要注意的是maxx并不是全局最优,而是局部相邻选择时的最优,发生重新开始的局势时,有必要去前面最优情况作比较。如果申请数组就不需要这样。
maxx_global=max(maxx,maxx_global);
}
return maxx_global;
}
};

或者直接在线处理

class Solution {
public:
int maxSubArray(vector<int>& nums) {
//在线处理
//策略:如果前面的和是有增益效果的(sum>0),则可以继续;如果前面的和无增益效果的(sum<0),则舍弃;maxx始终保持全局最大。
if(nums.empty())
return 0;
int sum=nums[0];
int maxx=sum;
for(int i=1;i<nums.size();i++){
if(sum>0)
sum+=nums[i];
else
sum=nums[i];
maxx=max(maxx,sum);
}
return maxx;
}
};

leetcode之53.最大子序和的更多相关文章

  1. 【LeetCode】53.最大子序和

    最大子序和 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: ...

  2. Leetcode题目53.最大子序和(动态规划-简单)

    题目描述: 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连 ...

  3. LeetCode 53. 最大子序和(Maximum Subarray)

    53. 最大子序和 53. Maximum Subarray 题目描述 给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. LeetCode53. M ...

  4. Leetcode之动态规划(DP)专题-53. 最大子序和(Maximum Subarray)

    Leetcode之动态规划(DP)专题-53. 最大子序和(Maximum Subarray) 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. ...

  5. Java实现 LeetCode 53 最大子序和

    53. 最大子序和 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 ...

  6. leetcode 120. 三角形最小路径和 及 53. 最大子序和

    三角形最小路径和 问题描述 给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 例如,给定三角形: [ [2], [3,4], [6,5,7], [4,1,8,3] ] ...

  7. 1. 线性DP 53. 最大子序和.

    53. 最大子序和. https://leetcode-cn.com/problems/maximum-subarray/ func maxSubArray(nums []int) int { dp ...

  8. 53. 最大子序和(剑指 Offer 42)

    53. 最大子序和(剑指 Offer 42) 知识点:数组:前缀和:哨兵:动态规划:贪心:分治: 题目描述 输入一个整型数组,数组中的一个或连续多个整数组成一个子数组.求所有子数组的和的最大值. 要求 ...

  9. Leetcode——53.最大子序和

    @author: ZZQ @software: PyCharm @file: leetcode53_最大子序和.py @time: 2018/11/26 12:39 要求:给定一个整数数组 nums ...

随机推荐

  1. DB2中常见sqlCode原因分析

    000 | 00000 | SQL语句成功完成 01xxx | SQL语句成功完成,但是有警告 +012 | 01545 | 未限定的列名被解释为一个有相互关系的引用 +098 | 01568 | 动 ...

  2. IDEA 配置热更新

  3. linux查看网关

    Linux下查看网关方法:route -n ip route show traceroute www.prudentwoo.com -s 100 第一行就是自己的默认网关 netstat -r mor ...

  4. py脚本修改后自动重启

    在用socket.io, pika之类启动一个脚本死循环做server或者client的时候: 1脚本被编辑之后,是不会自动重启 2当代码报错的时候,会立即退出, 只能手动重新运行 python ap ...

  5. Springboot 使用JPA

    Springboot 使用jpa maven依赖 <dependency> <groupId>org.springframework.boot</groupId> ...

  6. sh_11_字典的其他操作

    sh_11_字典的其他操作 xiaoming_dict = {"name": "小明", "age": 18} # 1. 统计键值对数量 p ...

  7. html页面中引入html

    我们写页面通常会遇到这种情况,一个模块很多页面都用到,那么我们为了方便就会单独写到一个页面,然后引入进去,我知道的有三种: 1.用标签<iframe></iframe> 例: ...

  8. 【Red Hat Linux基础】 磁盘分区详细教程

    https://blog.51cto.com/sunjie123/1687535 Linux中添加新硬盘后对硬盘的分区以及挂载 https://www.linuxidc.com/Linux/2018- ...

  9. 「CQOI2014」数三角形

    题目链接 问题分析 可以先任意选\(3\)个数,然后减去三点共线的部分. 三点共线又分\(2\)种情况: 横的或者竖的.这一部分方案数是\(n\times{m\choose 3}+m\times {n ...

  10. Python argparse 用法总结

    使用argparse的四个基本步骤 创建 ArgumentParser() 对象 调用 add_argument() 方法添加参数 使用 parse_args() 解析添加的参数 # example ...