标签:
#include<map> #include<iostream> #include<vector> #include<set> using namespace std; void get(vector<int> a) { vector<int> num; int i = 0; map<int, int> ma; num.push_back(0); num.push_back(a[0]); for (i = 1; i < a.size(); i++) { num.push_back(num[i] + a[i]); } for (i = 0; i < num.size(); i++) { ma[num[i]]++; } set<int> fi; map<int, int>::iterator it; for (it = ma.begin(); it != ma.end();it++) { if (it->second>1) { fi.insert(it->first); } } int j = 0, n = 0, first = 0, last = 0; for (i = 0; i < num.size(); i++) { if (fi.find(num[i]) != fi.end()) { for (j = i; j < num.size(); j++) { if (num[i] == num[j]) if (j - i>n) { n = j - i; first = i; last = j; //cout << i<<" "<<j<<num[i] << " " << num[j]<<endl; } } } } /* for (j = 0; j < num.size(); j++) { for (i = 0; i <= j; i++) { if (num[i] == num[j]) if (j - i>n) { n = j - i; first = i; last = j; //cout << i<<" "<<j<<num[i] << " " << num[j]<<endl; } } } */ for (i = first; i < last; i++) cout << a[i] << " "; } int main() { int x; vector<int> a={1,2,3,4,-4,-3,-1,-2,5,6} ; get(a); }
思想:i < j;
sum[i] = a[0] + ...+ a[i];
sum[j] = a[0] + ...+ a[j];
如果sum[i]和sum[j]相等,则a[i + 1] + ... + a[j] = 0;
标签:
原文地址:http://my.oschina.net/a20092173/blog/511380