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

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)

http://www.xdnf.cn/news/7874.html

相关文章:

  • systick滴答定时器us延时和毫秒延时
  • 自动获取新版本 js 静态文件
  • 计算机网络-MPLS VPN报文转发
  • Redis面试题全面解析:从基础到底层实现
  • Python Seaborn 高级可视化指南
  • Datawhale 5月llm-universe 第4次笔记
  • 游戏引擎学习第302天:使用精灵边界进行排序
  • 化工行业质检LIMS 系统应用 原材料与成品质量追溯智能化方案
  • Hass-Panel - 开源智能家居控制面板
  • LeetCode222_完全二叉树的结点个数
  • vscode离线安装组件工具vsix
  • 《微服务架构设计模式》笔记
  • PyTorch中cdist和sum函数使用详解
  • 【图像大模型】深度解析RIFE: 基于中间流估计的实时视频插帧算法
  • 解决C#泛型类参数无法带参数实例化的问题
  • Speexx: Online Language Training Business Coaching Platform
  • 使用Tkinter写一个发送kafka消息的工具
  • DVWA-XSS
  • 网络流量分析工具ntopng的安装与基本使用
  • Java接口P99含义解析
  • 【713. 乘积小于 K 的子数组】
  • 目标检测 RT-DETR(2023)详细解读
  • Python 包管理工具uv常用场景使用指南
  • 在线视频下载利器,支持100多平台下载
  • [Java实战]Spring Boot整合Prometheus:应用性能监控与可视化(三十二)
  • 高级学习算法(神经网络 决策树)
  • 基于 STM32 的 PC ARGB 风扇控制器设计与实现
  • k8s-NetworkPolicy
  • Android Handler/Looper线程管理实战攻略:从零到企业级开发
  • Android车载应用开发:Kotlin与Automotive OS深度实践