요구 사항 : 플라스틱 고리의 배열을 입력 배열은 또한 포지티브, 네거티브 있습니다.
연속 배열이나 정수의 서브 어레이의 복수의 각 서브 어레이가있다.
모든 하위 배열의 최대를 추구합니다. 소요 시간 복잡도는 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 행째의 최대 값을 선택하는, 환형의 위치를 이동 추가하지.
코드 :
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
(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 }