1. 程式人生 > >LeetCode 918. Maximum Sum Circular Subarray

LeetCode 918. Maximum Sum Circular Subarray

題解

最大連續子陣列和大家都會做了,就一句話:

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); }