반환 하위 어레이의 정수 환상의 배열 및 최대

요구 사항 : 플라스틱 고리의 배열을 입력 배열은 또한 포지티브, 네거티브 있습니다.

연속 배열이나 정수의 서브 어레이의 복수의 각 서브 어레이가있다.

모든 하위 배열의 최대를 추구합니다. 소요 시간 복잡도는 O (N)

 

아이디어 : 먼저, 예를 들면 배열 -567-10-9

배열 요소 : -567-10-9

제 시작부터 = 5-5 + 6 <= 13 + 6 6 7> 713-10 = 3> -103-9 = -6> -91

값 -5에 대응하는 부분 배열. 6 6767-1067-10-9

발견 될 수있는 [I-1] + 부분 배열보다 큰 플러스 [I-1] 이하이면 [I] 및 2 종 이상의 관계의 [I]은 아무 값 A는 적은 것보다는보다 큰 , A [I-1]을 다음의 2 행째의 최대 값을 선택하는, 환형의 위치를 ​​이동 추가하지.

 

코드 :

(1 개)  수입 java.util.Scanner;
4 2  
3  공용  클래스 에서 Test1 {
 공공 정적 INT getMax ( INT 도착 []) {
 INT = 도착 [0 5 ];
6 INT의 TMP = 0 ;
7  ( INT I = 0; I <arr.length; 나는 ++ ) {
 경우 (TMP <0 8 9 ) {
                  TMP = 도착 [I];
10 의 경우 (TMP> 0 && < TMP) {
 11                      = TMP;
                                                                12                  }
 13              } 다른 {
 14                  TMP + = 도착 [I];
15                  의 경우 ( TMP) {
 16                      = TMP;
17                  }
 18              }
 19          }
 20          ;
21      }
 22  
23      공중  정적  INT의 최대 ( INT 도착 []) {
 24          INT 최대 =가, 언 [0 ];
(25)          에 대한 ( INT난 = 0; 난 <arr.length; I ++ ) {
 26 일              경우 (최대 < 도착 [I]) {
 27                  최대 =가 , 언 [I];
28              }
 29          }
 30          리턴 최대;
31      }
 32  
33      공공  정적  무효 메인 (문자열 []에 args) {
 34          INT [] 배열 = 새로운  INT [100 ];
35          에서 System.out.println ( "请输入数组的长度" );
36          스캐너 SC는 = 새로운 스캐너 (System.in)를;
37          INT N =sc.nextInt ();
38          에서 System.out.println ( "请依次输入数组的元素" );
39          INT는 [] = 결과 새로운  INT [사항 Array.length]을;
40           ( INT I = 0; I는 <N; I ++ ) {
 41              어레이는 [I] = sc.nextInt ();
42          }
 43          sc.close ();
44           ( INT I = 0; I <사항 Array.length; 내가 ++ ) {
 45              INT의 온도 = 어레이 [0 ];
46               ( INT I1 = 0; I1 <사항 Array.length - 1] I1 ++ ) {
 47                 어레이 [I1 = 배열 [I1 + 1 ];
48              }
 49              어레이 [사항 Array.length - 1] = 온도;
50              결과 [I] = getMax (배열);
51          }
 52          INT의 R은 = 최대 (결과);
53          에서 System.out.println ( "最大子数组和为"+ R);
54      }
 55 }
코드보기

 

 

추천

출처www.cnblogs.com/tkg1314/p/12375414.html