정렬되지 않은 정수 배열을 감안할 때, 가장 큰 금액을 가지고있는 부분 배열을 찾을 수 있습니다. 합 부분 배열의 왼쪽과 오른쪽 경계의 인덱스를 돌려줍니다. 여러 솔루션이있는 경우, 가장 왼쪽 부분 배열을 반환합니다.
가정
- 주어진 배열 null이 아니고, 적어도 하나의 길이를 가진다.
예
-
{2, -1, 4, -2, 1}, 가장 큰 부분 배열의 합이 2이며 + (-1) + 4 = 5의 좌우 경계의 인덱스는 각각 0 ~ 2이다.
- {-2, -1, -3}, 가장 큰 부분 배열 합은 -1. 왼쪽과 오른쪽 경계의 인덱스는 모두 하나입니다
[오른쪽, 왼쪽, 합]과 같은 배열의 결과를 반환
공공 클래스 솔루션 { 공공 INT [] largestSum ( INT [] 배열) { // 여기에 솔루션을 작성 하는 경우 (배열 == null의 || 사항 Array.length == 0 ) { 반환 배열; } INT globalMax =는 Integer.MIN_VALUE, globalLeft = 0 globalRight = 0 ; INT는 0 = 왼쪽 ; INT [] = 합계 새로운 INT [사항 Array.length]; 위한 ( INT I = 0; I <사항 Array.length; I ++ ) { 경우 (I == 0 || 합 [I - 1] <= 0 ) { 합 [I] = 배열 [I]; 왼쪽 = I를; } 다른 { 합 [내가] = 합계 [I - 1] + 어레이 [I]; } 경우 (합 [I]> globalMax) { globalMax = 합 [I]; globalLeft는 = 왼쪽; globalRight = I; } } 돌아가 새로운 지능 [{globalMax, globalLeft, globalRight}; } }