题解 | #连续子数组的最大和#

连续子数组的最大和

https://www.nowcoder.com/practice/459bd355da1549fa8a49e350bf3df484?tpId=295&tqId=23259&ru=%2Fpractice%2F5164f38b67f846fb8699e9352695cd2f&qru=%2Fta%2Fformat-top101%2Fquestion-ranking&sourceUrl=%2Fexam%2Foj%3Fpage%3D1%26tab%3D%25E7%25AE%2597%25E6%25B3%2595%25E7%25AF%2587%26topicId%3D295

渐渐对动态规划有感觉了

class Solution {
public:
    int FindGreatestSumOfSubArray(vector<int> array) {
      //  dp[i] 表示结尾元素为i下标的子数组的和的最大值
      //  最后一个不一定就是和最大值,因为子数组不一定取到最后一个元素
      //  每次取子数组时,记录下最大值
      int res = -200;
      std::vector<int> dp(array.size(), 0);
      
      //  假设每个元素都为子数组时和最大
      for (int i = 0; i < array.size(); ++i) {
        dp[i] = array[i];
      }
      
      for (int i = 0; i < array.size(); ++i) {
        dp[i] = std::max(dp[i], dp[i - 1] + array[i]);
        //  以某下标i结尾的子数组,其和达到最大,记录下来
        res = std::max(res, dp[i]);
      }
      
      return res;
    }
};
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务