mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-09 19:44:45 +08:00
添加 0053.最大子数组和.md C语言动态规划解法
This commit is contained in:
@ -231,6 +231,7 @@ var maxSubArray = function(nums) {
|
||||
```
|
||||
|
||||
### C:
|
||||
贪心:
|
||||
```c
|
||||
int maxSubArray(int* nums, int numsSize){
|
||||
int maxVal = INT_MIN;
|
||||
@ -249,6 +250,39 @@ int maxSubArray(int* nums, int numsSize){
|
||||
}
|
||||
```
|
||||
|
||||
动态规划:
|
||||
```c
|
||||
/**
|
||||
* 解题思路:动态规划:
|
||||
* 1. dp数组:dp[i]表示从0到i的子序列中最大序列和的值
|
||||
* 2. 递推公式:dp[i] = max(dp[i-1] + nums[i], nums[i])
|
||||
若dp[i-1]<0,对最后结果无益。dp[i]则为nums[i]。
|
||||
* 3. dp数组初始化:dp[0]的最大子数组和为nums[0]
|
||||
* 4. 推导顺序:从前往后遍历
|
||||
*/
|
||||
|
||||
#define max(a, b) (((a) > (b)) ? (a) : (b))
|
||||
|
||||
int maxSubArray(int* nums, int numsSize){
|
||||
int dp[numsSize];
|
||||
// dp[0]最大子数组和为nums[0]
|
||||
dp[0] = nums[0];
|
||||
// 若numsSize为1,应直接返回nums[0]
|
||||
int subArrSum = nums[0];
|
||||
|
||||
int i;
|
||||
for(i = 1; i < numsSize; ++i) {
|
||||
dp[i] = max(dp[i - 1] + nums[i], nums[i]);
|
||||
|
||||
// 若dp[i]大于之前记录的最大值,进行更新
|
||||
if(dp[i] > subArrSum)
|
||||
subArrSum = dp[i];
|
||||
}
|
||||
|
||||
return subArrSum;
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
-----------------------
|
||||
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>
|
||||
|
Reference in New Issue
Block a user