题解 | #牛群的能量#【C语言】
牛群的能量
https://www.nowcoder.com/practice/00f87ddcd18842d0824d487fd70a730e
题目描述:
在一个数组里面找到最大子串和并且返回
算法1:动态规划
解题思路:
- 使用动态规划的思想,通过遍历数组找到最大连续子串的和。
- 定义两个变量
maxSum
和currentSum
分别表示全局最大和和当前连续子串的和。 - 初始化
maxSum
和currentSum
为数组的第一个元素energy[0]
。 - 从数组的第二个元素开始遍历,对于每个元素
energy[i]
,判断以下两种情况:
如果 currentSum + energy[i] > energy[i]
,则将 energy[i] 加入到当前和 currentSum 中。
否则,将当前和 currentSum 更新为 energy[i],表示以当前元素为起点重新计算连续子串的和。
5.在遍历的过程中,如果当前和 currentSum
大于全局最大和 maxSum
,则更新全局最大和为当前和。
6.遍历结束后,返回全局最大和作为结果。
实现代码:
int maxEnergy(int* energy, int energyLen ) { int maxSum = energy[0]; // 全局最大和的初始值 int currentSum = energy[0]; // 当前连续子串的和的初始值 for (int i = 1; i < energyLen; i++) { // 如果当前和加上当前元素大于当前元素本身,则将当前元素加入当前和 if (currentSum + energy[i] > energy[i]) { currentSum = currentSum + energy[i]; } else { currentSum = energy[i]; } // 如果当前和大于全局最大和,则更新全局最大和 if (currentSum > maxSum) { maxSum = currentSum; } } return maxSum; }
解题技巧
- 使用动态规划的思想,通过记录当前连续子串的和和全局最大和,可以避免重复计算子串和,提高效率。
- 在遍历数组时,通过比较当前和与当前元素的大小,可以判断是否需要重新计算连续子串的和。
- 在遍历的过程中,始终更新全局最大和,以保证最终得到的是最大连续子串的和。
C语言刷题日记 文章被收录于专栏
备战秋招!