LeetCode 918. Maximum Sum Circular Subarray
阿新 • • 發佈:2018-12-17
題解
最大連續子陣列和大家都會做了,就一句話:
cur_max=max(cur_max+nums[i],nums[i])
這次是環型陣列怎麼辦? 想法一:兩組首位拼成2n長的陣列,再求最大連續和。可行否?可 想法二:因為最大連續和可能在兩組中間,求起來比較麻煩,但是轉換一下 這時最小連續和肯定在一個數組不會跨界,用總和-最小=最大和 bingo!!
Code
int maxSubarraySumCircular(vector<int>& A) {
int cur_max,sum_max,cur_min,sum_min,total=0;
cur_max= sum_max=-30000;
cur_min=sum_min=30000;
for(int v:A){
cur_max=max(cur_max+v,v);
sum_max=max(sum_max,cur_max);
cur_min=min(cur_min+v,v);
sum_min=min(cur_min,sum_min);
total+=v;
}
return max(sum_max,total-sum_min);
}