leetcode - 53. 最大子序和
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. 最大子序和相关推荐
- leetcode 53. 最大子序和 动态规划解法、贪心法以及二分法
题目 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子 ...
- leetcode - 53. 最大子序和 152. 乘积最大子序列 - 两个算法之间的联系和区别
这两道算法题的解题思路是差不多的,但是从整体上分析,乘积最大子序列之和是最大子序和的进阶.先来看看两道算法题的简单描述. 53.最大子序和 给定一个整数数组 nums ,找到一个具有最大和的连续子数组 ...
- LeetCode 53. 最大子序和(动态规划)
文章目录 1. 题目描述 2. 解题 2.1 暴力求解 2.2 动态规划 1. 题目描述 题目链接:https://leetcode-cn.com/problems/maximum-subarray/ ...
- LeetCode 53:最大子序和解题以及优化思路(第一次独立刷题记录)
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 ...
- LeetCode 53最大子序和
力扣 思路: 「连续」是关键字,连续很重要,不是子序列. 动态规划 详细解答请参考力扣 定义dp数组: dp [i] 表示以nums[i]结尾的最大连续子数组的和 状态转移方程: ...
- leetcode 53.最大子序和
难度:简单 频率:159 题目 给定一个整数数组nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 解题思路 :动态规划(贪心) 解题方法: 1.对数组进行遍历 2.有 ...
- LeetCode 53. 最大子序和(Maximum Subarray)
第一次提交成功 class Solution { public:int maxSubArray(vector<int>& nums) {if (nums.size() == 1) ...
- leetcode 53. 最大子序和(C语言)
题目 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子 ...
- [leetcode] 53.最大子序和
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例 1: 输入:nums = [-2,1,-3,4,-1,2,1,-5,4] 输出:6 解释: ...
最新文章
- 每天一个linux命令(35):ln 命令
- 在Python这条路上踩过的坑(1)
- 第五节 8登陆练习操作
- Flask-Cache的使用
- ad如何设置pcb板子形状_俺老孙画个圈板框与安装孔PCB系列教程110
- ncl 添加点shp文件_气象编程 | NCL高效快速精准提取不规则区域内的格点数据
- Qt使用qss文件管理stylesheet
- 命令行请求网站地址带token_利用gitlab或gitee作为网站免费图床的C#实现
- Codeforces.741D.Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths(dsu on tree 思路)
- sql server外部连接
- 自定义docker nginx镜像无容器日志输出
- Python之高等数学的符号求解
- 数字基带通信系统的实现流程
- JAVA 文件上传 和 下载
- 如何把微信消息或者短信实时转发到另一个手机上
- 80/20时间管理法则全面解析
- 设计评选优秀教师和优秀学生候选人的程序。
- Eclipse 恢复误删jar包
- 3月30日—4月3日三年级课程
- python内置函数布尔值bool用法详解
热门文章
- oracle自定义存储过程:删除表(无论表是否存在)和检测表是否存在
- Spring 处理请求和响应相关的注解
- 【Day01】你有封装过 axios 吗?主要是封装哪些方面?如何中断 axios 请求?
- webpack Plugin常用 optimization splitChunks UglifyJsPlugin sourceMap
- JSON Stringify示例–如何使用JS解析JSON对象
- java 数据溢出和编译错误的差别
- html上传文件与后台处理,HTML加一般处理程序实现文件上传
- dma和通道的区别_STM32 定时器触发 ADC 多通道采集,DMA搬运至内存
- 消息传递的图神经网络
- Python多线程同步、互斥锁、死锁