53. 最大子序和 - 动态规划

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

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

进阶:
如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。
——————————————————————————————————————
1、暴力解法

解题思路:从数组第一个元素开始,计算第一个元素到当前元素的总和,并将每次计算的当前最大值保存在一个变量中。循环数组的每个元素,最后得到最大子序和。具体C++代码如下:

class Solution {
public:int maxSubArray(vector<int>& nums) {int length = nums.size();     #计算数组长度int ans = nums[0];     #将最大子序和变量初始化为nums[0]for(int i=0;i<length;i++){int sum = 0;     #每次迭代重新将当前子序和赋值为0for(int j=i;j<length;j++){sum = sum + nums[j];     #对于数组每个元素,计算当前的最大子序和if(ans < sum)ans = sum;}}return ans;}
};

——————————————————————————————————————
2、时间复杂度为n的动态规划解法

解题思路:遍历数组,设当前子序和为sum,输入最大子序和为ans,如果最大子序和小于当前子序和,则把当前子序和赋值给最大子序和。如果当前子序和小于0,则让当前子序和变为零,最大子序和保持不变。具体C++代码如下:

class Solution {
public:int maxSubArray(vector<int>& nums) {int length = nums.size();      #计算数组的长度的变量int sum = 0;      #用于保存当前最大子序和的变量int ans = nums[0];      #用于输出的最大子序和的变量,初始化为nums[0]for(int i=0;i<length;i++)      #循环一次,时间复杂度为O(n){sum = sum + nums[i];      #从第一个元素开始相加if(ans < sum)      #如果最大子序和小于当前子序和ans = sum;      #则将sum值赋值给ansif(sum < 0)      #如果当前子序和小于0,则对于最大子序和是有害的,下次循环前将sum变为0sum = 0;}return ans;}
};

leetcode - 53. 最大子序和相关推荐

  1. leetcode 53. 最大子序和 动态规划解法、贪心法以及二分法

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

  2. leetcode - 53. 最大子序和 152. 乘积最大子序列 - 两个算法之间的联系和区别

    这两道算法题的解题思路是差不多的,但是从整体上分析,乘积最大子序列之和是最大子序和的进阶.先来看看两道算法题的简单描述. 53.最大子序和 给定一个整数数组 nums ,找到一个具有最大和的连续子数组 ...

  3. LeetCode 53. 最大子序和(动态规划)

    文章目录 1. 题目描述 2. 解题 2.1 暴力求解 2.2 动态规划 1. 题目描述 题目链接:https://leetcode-cn.com/problems/maximum-subarray/ ...

  4. LeetCode 53:最大子序和解题以及优化思路(第一次独立刷题记录)

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

  5. LeetCode 53最大子序和

    力扣 思路: 「连续」是关键字,连续很重要,不是子序列. 动态规划 详细解答请参考力扣 定义dp数组:        dp [i] 表示以nums[i]结尾的最大连续子数组的和 状态转移方程:    ...

  6. leetcode 53.最大子序和

    难度:简单 频率:159 题目 给定一个整数数组nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 解题思路 :动态规划(贪心) 解题方法: 1.对数组进行遍历 2.有 ...

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

    第一次提交成功 class Solution { public:int maxSubArray(vector<int>& nums) {if (nums.size() == 1) ...

  8. leetcode 53. 最大子序和(C语言)

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

  9. [leetcode] 53.最大子序和

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

最新文章

  1. 每天一个linux命令(35):ln 命令
  2. 在Python这条路上踩过的坑(1)
  3. 第五节 8登陆练习操作
  4. Flask-Cache的使用
  5. ad如何设置pcb板子形状_俺老孙画个圈板框与安装孔PCB系列教程110
  6. ncl 添加点shp文件_气象编程 | NCL高效快速精准提取不规则区域内的格点数据
  7. Qt使用qss文件管理stylesheet
  8. 命令行请求网站地址带token_利用gitlab或gitee作为网站免费图床的C#实现
  9. Codeforces.741D.Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths(dsu on tree 思路)
  10. sql server外部连接
  11. 自定义docker nginx镜像无容器日志输出
  12. Python之高等数学的符号求解
  13. 数字基带通信系统的实现流程
  14. JAVA 文件上传 和 下载
  15. 如何把微信消息或者短信实时转发到另一个手机上
  16. 80/20时间管理法则全面解析
  17. 设计评选优秀教师和优秀学生候选人的程序。
  18. Eclipse 恢复误删jar包
  19. 3月30日—4月3日三年级课程
  20. python内置函数布尔值bool用法详解

热门文章

  1. oracle自定义存储过程:删除表(无论表是否存在)和检测表是否存在
  2. Spring 处理请求和响应相关的注解
  3. 【Day01】你有封装过 axios 吗?主要是封装哪些方面?如何中断 axios 请求?
  4. webpack Plugin常用 optimization splitChunks UglifyJsPlugin sourceMap
  5. JSON Stringify示例–如何使用JS解析JSON对象
  6. java 数据溢出和编译错误的差别
  7. html上传文件与后台处理,HTML加一般处理程序实现文件上传
  8. dma和通道的区别_STM32 定时器触发 ADC 多通道采集,DMA搬运至内存
  9. 消息传递的图神经网络
  10. Python多线程同步、互斥锁、死锁