Data Structure Array: Maximum circular subarray sum

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 }

 

你可能感兴趣的:(struct)