最大連続サブアレイとJava実装

問題の説明:

  N素子のアレイ、最大で連続サブアレイを求めます。例えば:[ - 1,2,1]、及び最大連続サブ配列である[2,1]、3であり、そして

  次のようにアレイは、加算演算のシーケンスを用いて、本明細書で使用されます。

パッケージseries00。

輸入java.util.Arrays。
インポートjava.util.Scanner;

パブリッククラスシリーズ1 {

パブリック静的無効メイン(文字列[] args){
//准备数据
するSystem.out.println( "请输入个数N:")。
スキャナSC1 =新しいスキャナ(System.in);
INT N = sc1.nextInt()。
System.out.println( "请输数列:");
INT [] =新しいINT [N]。
以下のために(INT i = 0; iはa.length <; iは++){
スキャナSC2 =新しいスキャナ(System.in)。
[I] = sc2.nextInt()。
}
int型のカウント= 0;
INT、M = 0。
INT []和=新しいINT [N-2]。
{(; iがa.length-2 <I ++はiが0 = INT)のため
//判断是否连续
1 && [I + 1] -a [ - ((([I] -a [I + 1] ==場合I + 2] == - 1))
||(([I] -a [I + 1] == 1)&& [I + 1] -a [I + 2] == 1)){
++数えます。
他IF}(カウント!= 0){
加算//算術配列
IFを(COUNT%2 == 0){
SUM [M] =((COUNT + 2)/ 2)*([COUNT-I] + [I + 1である。]);
}他{
SUM [M] =(COUNT + 2)*([I-1]);
}
COUNT = 0;
M ++;
}そうでなければ{
COUNT = 0;
}
((I IF a.length 3 - !==)&&(COUNT = 0)){
IF(COUNT%2 == 0){
SUM [M] =((COUNT + 2)/ 2)*([COUNT-I] + [I + 1]);
}他{
SUM [M] =(COUNT + 2)*([-I 1。]);
}
}

}

Arrays.toString(SUMののSystem.out.println());
配列,.ソート(SUM)
のSystem.out.println( "及び最大連続サブアレイは:" + SUM [-N 3。]);
}

}
テスト:

Nの番号を入力してください:
20である
列の数を入力してください
。1
2
。3
。4
。5
。6
5
4
3
2
。3
。4
。5
。6
。7
6
5
4
3
2

の結果:

[21、20、27、27、0、0、0、0、0、0、0、0、0、0、0、0、0、0]
最大連続となる:27
 
------- --------------

おすすめ

転載: www.cnblogs.com/hyhy904/p/11257588.html