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 }