当前位置: 首页 > news >正文

leetcode hot100刷题日记——7.最大子数组和

在这里插入图片描述

class Solution {
public:int maxSubArray(vector<int>& nums) {//方法一:动态规划//dp[i]表示以i下标结尾的数组的最大子数组和//那么在i=0时,dp[0]=nums[0]//之后要考虑的就是我们要不要把下一个数加进来,如果下一个数加进来会使结果变大那就加进来//但要是下一个数加进来之后,还不如这个数单独大,那我们就舍弃前面的子数组和,直接用单独这个数,即://dp[i]=max(dp[i-1]+nums[i],nums[i])//什么情况下“下一个数加进来之后,还不如这个数单独大”?//dp[i-1]为负数的时候// int n=nums.size();// vector<int>dp(n);// dp[0]=nums[0];// int maxx=nums[0];// for(int i=1;i<n;i++){//     dp[i]=max(dp[i-1],0)+nums[i];//     maxx=max(dp[i],maxx);// }// return maxx;//方法2:前缀和+贪心//最大子数组和=max(所有当前前缀和-最小前缀和)//为什么只需要维护最小前缀和呢?//因为最大子数组和这个问题要看的是连续部分!//你如果求最大前缀和-最小前缀和//那么有可能最大前缀和比最小前缀和短!//eg. 5 4 3 -2 -1 -5//最大前缀和是5+4+3=12//最小前缀和是5+4+3-2-1-5=4//最大前缀和-最小前缀和=8//但是不对啊!实际上最大子数组和是5+4+3=12啊!//所以最小前缀和初始化值为0int n=nums.size();if(n==1)return nums[0];int ans=INT_MIN;int minn=0;int sum=0;for(int i=0;i<n;i++){sum+=nums[i];ans=max(ans,sum-minn);minn=min(minn,sum);}return ans;}
};

时间复杂度:O(N)
空间复杂度:
方法一是O(N)
方法二是O(1)

相关文章:

  • 计算机视觉与深度学习 | Python实现CEEMDAN-ISOS-VMD-GRU-ARIMA时间序列预测(完整源码和数据)
  • 目标检测基础知识
  • 目标检测135个前沿算法模型汇总(附源码)!
  • vue项目启动报错(node版本与Webpack)
  • vue-cli 构建打包优化(JeecgBoot-Vue2 配置优化篇)
  • MEMO数据DID与ZK技术:赋能RWA代币化与可信流通的新基石
  • C++ 01.vscode配置c++开发环境
  • C++语法理解记录
  • 安卓开发用到的设计模式(1)创建型模式
  • 缺乏经验的 PCB 过孔建模方法
  • NIFI的处理器:JSLTTransformJSON 2.4.0
  • 基于LiveData和ViewModel的路线管理实现(带PopupWindow删除功能)
  • 【神经网络与深度学习】流模型的通俗易懂的原理
  • Simon J.D. Prince《Understanding Deep Learning》
  • vscode连接WSL卡住
  • jvm调优以及常见jvm问题解决等
  • chrono类 根据duration 类的周期类型得到对应的周期名称
  • 基于AI大语言模型的历史文献分析在气候与灾害重建中的技术-以海南岛千年台风序列重建为例
  • 现代生活中的健康养生之道
  • 传统Spring MVC + RESTful 与 Vue3 结合 JWT Token 验证的示例
  • 江苏城乡建设网站/seo每天一贴博客
  • 做手机网站哪家好/百度搜索推广和信息流推广
  • 网站设计的主要内容/市场调研的步骤
  • 自己做的网站套dedecms教程/网络营销策划与创意
  • 深圳横岗网站建设/厦门seo网站管理
  • 北京网站建设网页设计/百度搜索关键词优化