Data Structure Array: Largest subarray with equal number of 0s and 1s

http://www.geeksforgeeks.org/largest-subarray-with-equal-number-of-0s-and-1s/

 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 void findsubarray(int arr[], int n) {

12     map<int, vector<int> > S;

13     int sum = 0;

14     for (int i = 0; i < n; i++) {

15         sum += (arr[i] == 0? -1 : 1);

16         if (S.find(sum) != S.end()) S[sum].push_back(i);

17         else S[sum] = vector<int>(1, i);

18     }

19     int ans = 0;

20     for (map<int, vector<int> >::iterator it = S.begin(); it != S.end(); it++) {

21         if ((it->first) == 0) ans = max(ans, (it->second)[(it->second).size()-1]+1);

22         else ans = max(ans, (it->second)[(it->second).size()-1] - (it->second)[0]);

23     }

24     cout << ans << endl;

25 }

26 

27 int main() {

28     int arr[7] = {1, 0, 1, 1, 0, 1, 1};

29     findsubarray(arr, 7);

30     return 0;

31 }

 

你可能感兴趣的:(number)