DD8. 给定整数序列求连续子串最大和
描述
给定无序整数序列,求连续非空子串最大和,例如{-23 17 -7 11 -2 1 -34},子串为{17,-7,11},最大和为21输入描述
输入为整数序列,数字用空格分隔,如:-23 17 -7 11 -2 1 -34输出描述
输出为子序列的最大和:21示例1
输入:
-23 17 -7 11 -2 1 -34
输出:
21
C 解法, 执行用时: 1ms, 内存消耗: 376KB, 提交时间: 2018-08-19
#include <stdio.h> #include <stdlib.h> #include <string.h> int maxSubArray(int A[], int n) { int sum = 0; int maxsum = A[0]; int i; if (n <= 0) return 0; for (i = 0; i < n; i++) { sum += A[i]; if (sum > maxsum) maxsum = sum; if (sum < 0) sum = 0; } return maxsum; } int main() { char a[1024] = {0}, b[1024] = {0}; int c[1024] = {0}; int tmp = 0, N = 0, len = 0, i = 0; int maxsum = 0; gets(a); while (a[i] != 0) { if (a[i] == ' ') { memcpy(b, &a[i-len], len); c[N] = atoi(b); memset(b, 0, len); N++; len = 0; i++; continue; } len++; i++; } memcpy(b, &a[i-len], len); c[N] = atoi(b); maxsum = maxSubArray(c, N + 1); printf("%d\n", maxsum); }
C 解法, 执行用时: 2ms, 内存消耗: 296KB, 提交时间: 2021-08-10
#include <stdio.h> #include <stdlib.h> int main() { int a[1024]; int n=0; while(1){ scanf("%d", &a[n++]); if(getchar()=='\n') break; } int sum = a[0]; int max = a[0]; for(int i=1; i<n; i++) { if(sum<0) sum=a[i]; else sum += a[i]; if(sum>max) max=sum; } printf("%d", max); }
C 解法, 执行用时: 2ms, 内存消耗: 312KB, 提交时间: 2021-09-10
#include <stdio.h> #include <limits.h> int main() { int arr[1000]; int index=0,num; while(scanf("%d",&arr[index++])!=EOF); int i,sum=0,max=INT_MIN; for(i=0;i<index-1;i++) { sum+=arr[i]; if(sum>max) max=sum; if(sum<0) sum=0; } printf("%d\n",max); return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 340KB, 提交时间: 2021-08-29
#include<stdio.h> int main() { int i=0,a[1000]={0},n,j,sum=0,max=-100; char c; while (scanf("%d",&a[i++])!=EOF) { if((c=getchar())=='\n') break; } n=i; for(i=0;i<n;i++) { sum=0; for(j=i;j<n;j++) { sum+=a[j]; if(sum>max) max=sum; else if(sum<0) { sum=0; break; } } } printf("%d\n",max); return 0; }
C++ 解法, 执行用时: 2ms, 内存消耗: 352KB, 提交时间: 2018-09-21
#include<iostream> #include<stdlib.h> #include<vector> #include<algorithm> #include<string> using namespace std; int maxhe(vector<int>vc) { int n=vc.size(); if (n == 0) return -1; if (n == 1) return vc[0]; int max = vc[0]; int max1 = vc[0]; for (int i = 1; i < n; i++) { if (vc[i]<max1 + vc[i]) { max1 = max1 + vc[i]; } else { max1 = vc[i]; } if (max1>max) max = max1; } return max; } int main() { vector<int>vc; int a; while (cin>>a) { vc.push_back(a); if (cin.get() == '\n') break; } int i=maxhe(vc); cout << i<<endl; return 0; }