[너 한테] 489. 가장 큰 서브 어레이 합계

정렬되지 않은 정수 배열을 감안할 때, 가장 큰 금액을 가지고있는 부분 배열을 찾을 수 있습니다. 합 부분 배열의 왼쪽과 오른쪽 경계의 인덱스를 돌려줍니다. 여러 솔루션이있는 경우, 가장 왼쪽 부분 배열을 반환합니다.

가정

  • 주어진 배열 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}; 
  } 
}

 

추천

출처www.cnblogs.com/xuanlu/p/12602776.html