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

连续子数组的最大和(二)

https://www.nowcoder.com/practice/11662ff51a714bbd8de809a89c481e21

#include <cstring>
class Solution {
public:
    vector<int> FindGreatestSumOfSubArray(vector<int>& array) {
        vector<int> result;
        int size = array.size();
        vector<int> dp(size, 0);
        dp[0] = array[0];
        int maxn = array[0];
        int L = 0, R = 0;
        int result_L = 0, result_R = 0;
        for (int i = 1; i < size; ++i) {
            R++;
            dp[i] = max(dp[i-1] + array[i], array[i]);
            if (dp[i-1] + array[i] < array[i]) {
                L = R;
            }
            if (dp[i] > maxn || 
                (dp[i] == maxn && (R-L+1) > (result_L - result_R + 1))) {
                    maxn = dp[i];
                    result_L = L;
                    result_R = R;
            }
        }
        for (int i = result_L; i <= result_R; ++i) {
            result.push_back(array[i]);
        }        
        return result;    
    }
};

空间压缩

class Solution {
public:
    vector<int> FindGreatestSumOfSubArray(vector<int>& array) {
        vector<int> result;

        int last_cur = array[0];
        int cur = 0;
        int maxn = array[0];

        int left = 0, right = 0;
        int result_left = 0, result_right = 0;
        for (int i = 1; i < array.size(); ++i) {
            right++;
            cur = max(last_cur + array[i], array[i]);
            if (last_cur + array[i] < array[i]) {
                left = right;
            }
            if (cur > maxn || (cur == maxn && right - left + 1 > result_right - result_left + 1)) {
                maxn = cur;
                result_left = left;
                result_right = right;
            }
            last_cur = cur;
        }
        for (int i = result_left; i <= result_right; ++i) {
            result.push_back(array[i]);
        }
        return result;
    }
};

2023-剑指-DP 文章被收录于专栏

2023-剑指-DP

全部评论

相关推荐

小红书 后端选手 n*16*1.18+签字费期权
点赞 评论 收藏
分享
object3:开始给部分🌸孝子上人生第一课了
点赞 评论 收藏
分享
一个菜鸡罢了:哥们,感觉你的简历还是有点问题的,我提几点建议,看看能不能提供一点帮助 1. ”新余学院“别加粗,课程不清楚是否有必要写,感觉版面不如拿来写一下做过的事情,教育经历是你的弱势就尽量少写 2. “干部及社团经历”和“自我评价”删掉 3. 论文后面的“录用”和“小修”啥的都删掉,默认全录用,问了再说,反正小修毕业前肯定能发出来 4. 工作经验和研究成果没有体现你的个人贡献,着重包装一下个人贡献
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务