順序付けられていない整数のシーケンスが与えられた場合、連続する部分文字列の最大合計を見つけます。

タイトル説明:

順序付けられていない整数のシーケンスが与えられた場合、連続する部分文字列の最大合計を見つけます。たとえば、{-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);
    }
}

おすすめ

転載: blog.csdn.net/weixin_43815275/article/details/114730620