최대 연속 하위 배열과 자바 구현

문제 설명 :

  N 소자 어레이의 최대 연속 서브 어레이를 찾는. 예를 들면 : - 1,2,1], 최대 연속 서브 어레이는 [2,1, 3 및

  다음과 같이 배열 합산 연산 시퀀스를 사용하여 본원에 채용된다 :

패키지 series00;

수입 java.util.Arrays;
수입 java.util.Scanner;

공용 클래스 시리즈 1 {

공공 정적 무효 메인 (문자열 []에 args) {
//准备数据
에서 System.out.println ( "请输入个数N");
스캐너 SC1 = 새로운 스캐너 (System.in);
N = INT sc1.nextInt ();
에서 System.out.println ( "请输数列:");
INT [] A = 새로운 INT [N];
대해 INT (I = 0; I <a.length는, 난 ++) {
스캐너 SC2 = 새로운 스캐너 (System.in);
A [I] = sc2.nextInt ();
}
INT 카운트 = 0;
INT의 m = 0;
INT [] = 합계 새로운 INT [N-2];
경우 (; 나는 a.length -2- <; I = 0 int로 난 ++) {
//判断是否连续
경우 (((a [I] -a [I + 1] == - 1 && A [I + 1] -a [ I + 2] == - 1))
|| ((a [I] -a [I + 1] == 1) && A [i가 + 1] -a [내가 + 2] == 1)) {
++ 카운트;
다른}가 (COUNT! = 0) 경우 {
// 연산 시퀀스를 합산
IF (COUNT % 2 == 0) {
SUM [m] = ((COUNT + 2) / 2) * (A [COUNT-I] + A [I + 1.]);
}는 다른 {
SUM [m] = (COUNT + 2) * (A [I- 1.])
}
= 0 COUNT
m ++;
}는 다른 {
COUNT = 0;
}
IF ((I a.length 3 -.! ==) && (COUNT = 0)) {
IF (COUNT % 2 == 0) {
SUM [m] = ((COUNT + 2) / 2) * (A [COUNT-I] + A는 [I + 1.]);
}는 {다른
SUM [m] = (COUNT + 2) * (A [1 -I.]);
}
}

}

Arrays.toString (SUM에서 System.out.println의 ());
어레이 ,. 정렬 (SUM)
에서 System.out.println ( "최대 연속 서브 어레이는"+ SUM [3 -N.]);
}

}
시험 :

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