leetcode [53]最大子序和/Maximum Subarray C++ 暴力解法和贪心解法
笔者在BAT从事技术研发多年,利用工作之余重刷leetcode,希望结合自己多年的实践经验,把算法讲的更清楚,更多原创文章欢迎关注公众号「代码随想录」。
题目地址
https://leetcode-cn.com/problems/maximum-subarray/
暴力解法
暴力解法的思路,第一层for 就是设置起始位置,第二层for循环遍历数组寻找最大值
时间复杂度:O(n^2)
空间复杂度:O(1)
class Solution {
public:int maxSubArray(vector<int>& nums) {int result = INT32_MIN;int count = 0;for (int i = 0; i < nums.size(); i++) { // 设置起始位置count = 0;for (int j = i; j < nums.size(); j++) { // 每次从起始位置i开始遍历寻找最大值count += nums[j];result = count > result ? count : result;}}return result;}
};
贪心解法
贪心解法,其实不是很好理解, 看上面暴力的解法是两层for循环,那如何省掉一层for循环呢
其实暴力解法中设置起始位置这个for循环是可以省略掉的,这也是关键的一步,有了这个思路之后,就可以看一下代码了
时间复杂度:O(n)
空间复杂度:O(1)
class Solution {
public:int maxSubArray(vector<int>& nums) {int result = INT32_MIN;int count = 0;for (int i = 0; i < nums.size(); i++) {count += nums[i];if (count > result) { // 相当于每次取各个终点的最大值result = count;}if (count <= 0) count = 0; // 相当于重置起点,因为遇到负数一定是拉低总体数值的}return result;}
};
更多精彩文章持续更新,可以微信搜索「 代码随想录」第一时间阅读,关注后有大量的学习资料和简历模板可以免费领取,本文 GitHub:https://github.com/youngyangyang04/leetcode-master 已经收录,欢迎star,fork,共同学习,一起进步。
leetcode [53]最大子序和/Maximum Subarray C++ 暴力解法和贪心解法相关推荐
- LeetCode 53. 最大子序和(Maximum Subarray)
第一次提交成功 class Solution { public:int maxSubArray(vector<int>& nums) {if (nums.size() == 1) ...
- 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 解释: ...
最新文章
- 面试数百名NLP工程师发现:90%以上是不合格的
- 半导体量子芯片开发获重要进展
- word从第3页开始设置页码为第一页_写论文、报告必会:快速让Word页码从第三页开始的方法...
- 迟到的2017年终总结与2018目标规划
- unity game和scene效果不一样_KTV装修设计:如何让消费者体验到不一样的KTV娱乐效果...
- java常见经典知识点汇总
- Centos6.4下安装mysql5.6.10
- Android Studio安装Flutter
- MFC开发IM-第十篇、MFC改变static text颜色
- 我的职业规划,大家给点意见吧!
- graphviz安装及使用
- android中颜色对应的值
- 【安装记录】如何在官网找到老版本的jdk,如 jdk-8u271-windows-x64
- 微机原理、计算机组成原理与计算机体系结构之间的关系
- 电力系统微型计算机继电保护试题及答案,电力系统微型计算机继电保护试题及答案(2002年4月)...
- 移动新魔百和M302A-YS代工_卡刷固件包
- Cesium开发:简单箭头画法
- Unity|一键复制log日志|小技巧
- 7-20 帅到没朋友
- IntelliJ IDEA初次创建简单的java项目--初学者使用详解
热门文章
- ASP.NET Web API 2基于令牌的身份验证
- (转)JAVA实现Windows拨号、IP切换
- Azure Messaging-ServiceBus Messaging消息队列技术系列1-基本概念和架构
- Vue中全局导入和按需导入的区别
- bzoj 3672 购票 点分治+dp
- 在 Linux 中怎样将 MySQL 迁移到 MariaDB 上
- Swift - 使用xib添加新界面
- 报错:1130-host ... is not allowed to connect to this MySql server
- Linux ftp命令
- TeamViewer订阅版上线,正式开售!