LeetCode 53. 最大子序和(Maximum Subarray)
第一次提交成功
class Solution {
public:int maxSubArray(vector<int>& nums) {if (nums.size() == 1) return nums[0];//int sum = -1;vector<int> submax;for (int i = 0; i < nums.size(); i++){if (sum >= 0){sum = sum + nums[i];submax.push_back(sum);}else{sum = nums[i];submax.push_back(sum);}}int max = submax[0];for (int i = 1; i < submax.size(); i++) {if (max < submax[i]) max = submax[i];}return max;}
};
这里我的思路是包含当前nums[i]的连续子数组的最大和(按序号只算i左边的),所以当前一个nums[i-1]处的最大值是负数时,nums[i]处的最大值就是nums[i]本身,当nums[i-1]处的最大值大于零,nums[i]处的最大值就是sum + nums[i]
对于nums中的第一个元素nums[0],我利用初始sum = -1,在循环中进入else把第一个位置最大值修改为nums[i]
第二次尝试:
其实对于上面的第二个循环并不必要,完全可以在第一个中进行。
class Solution {
public:int maxSubArray(vector<int>& nums) {if (nums.size() == 1) return nums[0];//int max = nums[0]; int sum = -1;for (int i = 0; i < nums.size(); i++){if (sum >= 0){sum = sum + nums[i];}else{sum = nums[i];}if (sum > max) max = sum;}return max;}
};
虽然这个sum初始化为-1看起来很巧妙,但是却有一点本末倒置,毕竟这是一个求和问题,sum初始化为0要更易于理解。
第三次尝试:先加为敬!
class Solution {
public:int maxSubArray(vector<int>& nums) {int max = nums[0]; int sum = 0;for (int i = 0; i < nums.size(); i++){sum += nums[i];if (sum > max) max = sum;if (sum < 0) sum = 0;}return max;}
};
判断只有一个元素也是多余的!顶多判断一个空数组,但是题目中说了至少有一个值。
LeetCode 53. 最大子序和(Maximum Subarray)相关推荐
- leetcode 53. 最大子序和 动态规划解法、贪心法以及二分法
题目 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子 ...
- leetcode - 53. 最大子序和 152. 乘积最大子序列 - 两个算法之间的联系和区别
这两道算法题的解题思路是差不多的,但是从整体上分析,乘积最大子序列之和是最大子序和的进阶.先来看看两道算法题的简单描述. 53.最大子序和 给定一个整数数组 nums ,找到一个具有最大和的连续子数组 ...
- leetcode - 53. 最大子序和
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. 最大子序和(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 解释: ...
最新文章
- 会Python的大学生了不起吗?是的,简直开挂!
- mysql服务器的启动方式有哪几种_Mysql启动的方式(四种)
- js获取url参数值
- springboot获取静态图片路径_SpringBoot中的全局异常处理你确定你真的知道吗?
- 南京大学计算机科学系照片,欧拉图-南京大学计算机科学与技术系.pdf
- as3 浅复制 深复制
- 一些比较少用但比较有用的linux命令备忘
- 数据仓库的 RDBMS 性能优化指南
- 1388C. Uncle Bogdan and Country Happiness
- Git初学札记(四)————Git Push的常规操作与Pull冲突解决
- Structural Deep Clustering Network 基于GNN的深度聚类算法 WWW2020
- 【知识图谱系列】自适应深度和广度图神经网络模型
- 大众点评信息流基于文本生成的创意优化实践
- python猴子吃桃子的问题_张含韵忍不住一吃再吃的这种湖南美食,你可能买到假货...
- 灵飞经4 西城八部 第二十章 倒行逆施(五)
- 2017 百度之星 复赛 Valley Numer(数位dp)
- 郭静:新交规火了蓝牙耳机
- vba 跳出for循环_ExcelVBA的三重FOR循环退出
- 小程序 canvas 实现电子签名
- 【从“元宇宙”大热中看隐私安全如何赋能创新】