最大子數組 II

給定一個整數數組,找出兩個 不重疊 子數組使得它們的和最大。
每個子數組的數字在數組中的位置應該是連續的。
返回最大的和。

 注意事項

子數組最少包含一個數

您在真實的面試中是否遇到過這個題? Yes
樣例
給出數組 [1, 3, -1, 2, -1, 2]
這兩個子數組分別為 [1, 3] 和 [2, -1, 2] 或者 [1, 3, -1, 2] 和 [2],它們的最大和都是 7
class Solution {
public:
    /**
     * @param nums: A list of integers
     * @return: An integer denotes the sum of max two non-overlapping subarrays
     */
    int maxTwoSubArrays(vector<int> nums) {
        // write your code here
         int length = nums.size();
        vector<int>left(length,0);
        vector<int>right(length,0);
      
        int max = nums[0];
        int temp = nums[0];
        left[0] = nums[0];
        for(int i = 1;i<nums.size();i++) {
            if(temp>=0) {
                if((temp+nums[i]>=0)) {
                temp += nums[i];
            } else {
                temp = 0;
            }
            } else {
                temp = nums[i];
            }
           
            if (temp>=max) {
                    max = temp;
                }
             left[i] = max;
        }
        
        max = nums[length-1];
        temp = nums[length-1];
        right[length-1] = nums[length-1];
        
        for(int i = length-2;i>0;i--){
            if(temp>=0) {
                 if((temp+nums[i]>=0)) {
                temp += nums[i];
               
            }else {
                temp = 0;
            }
            } else {
                temp = nums[i];
            }
           
             if (temp>=max) {
                    max = temp;
                }
             right[i] = max;
        }
       int maxSum = INT_MIN;
       for(int i=0;i<length-1;i++){
           maxSum = (maxSum>(left[i]+right[i+1])?maxSum:(left[i]+right[i+1]));
       }
       return maxSum;
    }
};

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容