Leetcode的简单算法题:53. 最大子数组和
2022/7/27 14:22:43
本文主要是介绍Leetcode的简单算法题:53. 最大子数组和,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
链接:https://leetcode.cn/problems/maximum-subarray/
之前题解的博客:https://tsuish.gitee.io/p/7a78
注:之后把这篇博客整理到hexo
我的代码
int max(int a,int b){ return a>b?a:b; } int maxSubArray(int* nums, int numsSize){ int dp[100001],res = nums[0]; dp[0] = nums[0]; for(int i=1;i<numsSize;i++){ dp[i] = max(dp[i-1]+nums[i],nums[i]); res = max(res,dp[i]); } return res; }
提交结果
执行结果:
通过
显示详情
添加备注
执行用时:
92 ms
, 在所有 C 提交中击败了
87.44%
的用户
内存消耗:
12.1 MB
, 在所有 C 提交中击败了
33.17%
的用户
通过测试用例:
209 / 209
思路
动态规划(英语:Dynamic programming,简称 DP),通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题。简单来说,动态规划其实就是,给定一个问题,我们把它拆成一个个子问题,直到子问题可以直接解决。然后呢,把子问题答案保存起来,以减少重复计算。再根据子问题答案反推,得出原问题解的一种方法。
参考:https://zhuanlan.zhihu.com/p/365698607
此题思路:
定义一个状态数组dp[100001],dp[i]表示第i个整数结尾的子数组中的最大值。
以第i个整数结尾的子数组分为两种情况:
1、和第i-1个整数结尾的子数组相连。
2、和第i-1个整数结尾的子数组不相连。即单独以第i个整数作为子数组。
状态转移方程:
dp[i] = max(dp[i-1]+nums[i],nums[i])
初始状态:dp[0] = nums[0]
注意,dp[i]表示nums[]中第i个整数结尾的子数组中的最大值,并不是nums[]中前i个整数的子数组的最大值。nums[]的前i个整数的子数组的最大值,是dp[]中前i(包括i)个元素的最大值。理解起来就是,nums[]的前i个整数的子数组的最大值,可能是以第k个(k<=i)整数结尾的子数组的最大值。
这句话说的很诗意:
coolBoy
2021-10-09
我觉得这道题目的思想是: 走完这一生 如果我和你在一起会变得更好,那我们就在一起,否则我就丢下你。 我回顾我最光辉的时刻就是和不同人在一起,变得更好的最长连续时刻。
出自:https://leetcode.cn/problems/maximum-subarray/solution/zui-da-zi-xu-he-by-leetcode-solution/1172041
参考:https://www.bilibili.com/video/BV1XR4y1j7Lo?t=317.8
这篇关于Leetcode的简单算法题:53. 最大子数组和的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享