求数组最长的和为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
- 求数组最长的和为0的连续子数组
- 最长连续子数组和为0
- 最长连续子数组的和
- 求连续子数组的最大和
- 求连续子数组的最大和
- 求连续子数组的最大和
- 求连续子数组的最大和
- 求连续子数组的最大和
- 求连续子数组的最大和
- 求连续子数组的最大和
- 求连续子数组的最大和
- 求连续子数组的最大和
- 求连续子数组的最大和
- 求连续子数组的最大和
- 求连续子数组的最大和
- 求连续子数组的最大和
- 求连续子数组的最大和
- 求连续子数组的最大和
- 什么是Linux系统架构?
- [Python]分享一些用来简化与SQL Server交互的函数
- javascript实现汉诺塔
- 设计模式
- 为什么会有缓冲区溢出攻击专栏
- 求数组最长的和为0的连续子数组
- ViewController之间如何传递数据
- 矩阵多维数组笔试题
- 如何在安卓app中使用FontAwesome图标
- Javascript Tips&Dialog
- 求矩阵中2×2子矩阵和的最大值
- 关于equals的一点小窍门
- 编程15年的技术大神之经验告白,样样实在
- linux下查看和添加PATH环境变量