求数组最长的和为0的连续子数组

来源:互联网 发布:出租房网络掉线 编辑:程序博客网 时间:2024/06/06 03:10
#include <stdio.h>#include <stdlib.h>#include <string>#include <vector>#include <set>#include <iostream>#include <map>#include <set>#include <string.h>using namespace std;void help(vector<int>& vec, char* buf){    for(int i = 0; i < strlen(buf);)    {        if(buf[i] != ' ')        {        if(buf[i] == '-')        {        string s = "";            s += buf[i + 1];            int tmp = atoi(s.c_str());            vec.push_back(-1*tmp);            i += 2;        }else        {        string s = "";            s += buf[i];            int tmp = atoi(s.c_str());            vec.push_back(tmp);            i += 1;        }        //vec.push_back()        }else        {        ++i;        }    }}void find(vector<int>& ivec, vector<int>& mvec){int maxlen = 0;//vector<int> vec;for(int i = 0; i < ivec.size(); ++i){int sum = 0;int len = 0;int mlen = 0;int j = i;int start = j;vector<int> vec;while(j < ivec.size()){sum += ivec[j];if(sum == 0){len = j - i + 1;if(len > mlen){mlen = len;}}++j;}for(int i = 0; i < mlen; ++i){vec.push_back(ivec[start + i]);//printf("%d\n", ivec[j])}if(vec.size() >= mvec.size()){mvec.clear();mvec = vec;}}}int main(int argc,char* argv[]){char buf[1024];memset(buf, 0, 1024);gets(buf);vector<int> vec;vector<int> ivec;vector<int> mvec;help(vec, buf);int maxlen = 0;find(vec, mvec);for(int i = 0; i < mvec.size(); ++i){printf("%d ", mvec[i]);}printf("\n");    return 0;}

输入 

1 2 3 4 -1 -2 -3 -4

输出

1 2 3 4 -1 -2  -3 -4 

0 0
原创粉丝点击