배열 : 연속 최대 및 하위 배열

제목 설명

HZ 가끔 그 이외의 컴퓨터 과학 학생을 깜박 일부 전문적인 문제를 얻는다. 테스트 그룹이 오늘 종료됩니다 후, 그는 일 말했다 : 벡터는 양의 정수, 해결할 문제가있을 때 이전 차원 패턴 인식에서, 종종 최대 연속 서브 벡터를 계산하는 것이 필요하다. 벡터가 음수를 포함하는 경우에는, 그것을 만회 할 옆에 양수를 음수를 포함하고 기대해야합니까? 예를 들면 : {6, -3, -2,7-, -15,1,2,2}, 및 (8)의 최대 연속 서브 벡터 (제까지 0에서 시작). 최대 연속 서브 배열 및 반환하고 당신이 그를 살 속지 않을 것이다? (부 벡터의 길이는 적어도 1)

문제 해결 아이디어

X가 함께 좌측 음이 아닌 개수 인 경우에는 다수 (X)의 어레이를 들어, x 값이 큰 추가 가능하므로 숫자는 X 전에 전체적으로 기여하고 있다고 믿는다. 처음 몇가 음수까지 추가 할 경우, 합계에 유해한 것으로 간주됩니다.
우리는, 그렇지 않으면, CUR = CUR + 현재 수를 CUR <0, 다음 포기하는 경우, 이전의 최대 수를 기록 최대와 CUR의 현재 값을 기록 현재의 수와 같은 CUR 수 있습니다. 업데이트 CUR 및 최대 최대보다 큰 경우.

참조 코드

1  공용  클래스 해결 {
 2      공개  INT FindGreatestSumOfSubArray ( INT [] 배열) {
 3          경우 (사항 Array.length == 0 ) {
 4               0 ;
5          }
 6          의 INT CUR = 어레이 [0 ];
7          INT의 최대 = 어레이 [0 ];
8          대는 ( int로 I = 1; I <사항 Array.length; 내가 ++ ) {
 9              CUR CUR => 0? 어레이 [I] + CUR : 배열 [I];
(10)              만약 (최대 < {CUR)
 11                 최대 = CUR;
12              }
 13          }
 14          리턴 최대;
15      }
 16 }

 

추천

출처www.cnblogs.com/carry6/p/11519164.html