http://www.geeksforgeeks.org/maximum-contiguous-circular-sum/
1 #include <iostream> 2 #include <vector> 3 #include <algorithm> 4 #include <queue> 5 #include <stack> 6 #include <string> 7 #include <fstream> 8 #include <map> 9 using namespace std; 10 11 bool allneg(int arr[], int n) { 12 for (int i = 0; i < n; i++) { 13 if (arr[i] > 0) return false; 14 } 15 return true; 16 } 17 18 int maxsum(int arr[], int n) { 19 int tmp = 0; 20 int ans = INT_MIN; 21 for (int i = 0; i < n; i++) { 22 tmp += arr[i]; 23 ans = max(ans, tmp); 24 tmp = max(tmp, 0); 25 } 26 return ans; 27 } 28 29 int maxcircular(int arr[], int n) { 30 int ans = maxsum(arr, n); 31 if (allneg(arr, n)) return ans; 32 int sum = 0; 33 for (int i = 0; i < n; i++) { 34 sum += arr[i]; 35 arr[i] = -arr[i]; 36 } 37 return max(ans, sum + maxsum(arr, n)); 38 } 39 40 int main() { 41 int arr[9] = {11, 10, -20, 5, -3, -5, 8, -13, 10}; 42 cout << maxcircular(arr, 9) << endl; 43 return 0; 44 }
Data Structure Array: Maximum circular subarray sum,布布扣,bubuko.com
Data Structure Array: Maximum circular subarray sum
原文:http://www.cnblogs.com/yingzhongwen/p/3653550.html