mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-10 04:06:51 +08:00
添加 0053.最大子数组和.md C语言动态规划解法
This commit is contained in:
@ -231,6 +231,7 @@ var maxSubArray = function(nums) {
|
|||||||
```
|
```
|
||||||
|
|
||||||
### C:
|
### C:
|
||||||
|
贪心:
|
||||||
```c
|
```c
|
||||||
int maxSubArray(int* nums, int numsSize){
|
int maxSubArray(int* nums, int numsSize){
|
||||||
int maxVal = INT_MIN;
|
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>
|
<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