タイトル説明:
順序付けられていない整数のシーケンスが与えられた場合、連続する部分文字列の最大合計を見つけます。たとえば、{-23 17 -7 11 -2 1 -34}、部分文字列は{17、-7,11}、最大合計は21です。
入力の説明:
入力は整数のシーケンスであり、数値は次のようにスペースで区切られます。-2317 -7 11 -2 1 -34
出力の説明:
出力はサブシーケンスの最大合計です:21
アイデア:
2つの変数を使用して、サブ配列の最大値とサブ配列の最大値を現在の位置に格納します。配列をトラバースして、現在の最大値が毎回0未満かどうかを判断します。ゼロ未満の場合は、次の値が低くなるため、破棄します。そして今回はサブアレイ合計の最大値を更新します。
import java.util.Scanner;
public class Main{
public static void main(String args[]){
Scanner sc=new Scanner(System.in);
String str=sc.nextLine();
String[] st=str.split(" ");
int [] arr=new int[st.length];
for(int i=0;i<st.length;i++){
arr[i]=Integer.parseInt(st[i]);
}
int sum=0;
int max=arr[0];
for(int i=0;i<arr.length;i++){
if(sum<0){
//如果目前最大值小于0,那就应该抛弃,因为只会拉低后面的值
sum=arr[i];
}else{
sum+=arr[i];
}
if(sum>max){
max=sum;
}
}
System.out.println(max);
}
}