給定一個整數數組,找出兩個 不重疊 子數組使得它們的和最大。
每個子數組的數字在數組中的位置應該是連續的。
返回最大的和。
注意事項
子數組最少包含一個數
您在真實的面試中是否遇到過這個題? 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;
}
};
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。