题解 | #牛群的能量#【C语言】

牛群的能量

https://www.nowcoder.com/practice/00f87ddcd18842d0824d487fd70a730e

题目描述:

在一个数组里面找到最大子串和并且返回

算法1:动态规划

解题思路:

  1. 使用动态规划的思想,通过遍历数组找到最大连续子串的和。
  2. 定义两个变量 maxSum 和 currentSum 分别表示全局最大和和当前连续子串的和。
  3. 初始化 maxSum 和 currentSum 为数组的第一个元素 energy[0]
  4. 从数组的第二个元素开始遍历,对于每个元素 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语言刷题日记 文章被收录于专栏

备战秋招!

全部评论

相关推荐

MScoding:你这个实习有一个是当辅导老师,这个和找技术岗没有关系吧?
点赞 评论 收藏
分享
nbdy:字太多了,写简历不是写自传,亮点难点技能点列出来就行,要简明扼要
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客企业服务