# Greedy# String Parsing

i917 - 12640 - Largest Sum Game

🔗 前往 ZeroJudge 原題

題目描述

題目要求找出一個數字序列中,連續數字的最大總和。序列中的數字可以是正數、負數或零。

解題思路

程式碼透過讀取輸入字串,並將其解析為一系列整數。它使用一個迴圈迭代字串,並嘗試提取每個數字。如果遇到負號,則將後續的數字視為負數。程式碼會計算一個累加和,並在每次迭代中更新最大和。如果累加和變為負數,則將其重置為零,因為負數的累加和不會對最大和產生任何貢獻。

複雜度分析

  • 時間複雜度: O(N),其中 N 是輸入字串的長度。程式碼需要迭代字串一次來解析數字和計算最大和。
  • 空間複雜度: O(1),程式碼只使用幾個整數變數來儲存累加和、最大和和臨時數字,因此空間複雜度是常數。

程式碼

#include <iostream>
using namespace std;
string s;
int main(){
	cin.tie(0); ios::sync_with_stdio(false);
	while(getline(cin,s)){
		s+=' ';
		int ans=0,sum=0;
		for(int i=0;i<s.size();++i){
			if(s[i]!=' '){
				int f=1,tmp=0;
				if(s[i]=='-'){
					f=-1;
					++i;
				}
				while(s[i]!=' '){
					tmp*=10;
					tmp+=s[i]-'0';
					++i;
				}
				sum+=tmp*f;
				if(sum<0)sum=0;
				else ans=max(ans,sum);
			}
		}
		cout << ans << "\n";
	}
}

Discussion